From 78eea6aad0a33cc737a338394f66ee9dc9766f8d Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 24 Dec 2024 14:49:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/__manifest__.py | 2 +- sf_message/controllers/main.py | 6 --- sf_message/data/bussiness_node.xml | 2 +- sf_message/data/template_data.xml | 4 +- sf_message/models/__init__.py | 1 + .../models/sf_message_mrp_production.py | 32 ++-------------- .../sf_message_mrp_production_wizard.py | 2 +- sf_message/models/sf_message_product.py | 38 +++++++++++++++++++ sf_message/models/sf_message_stock_picking.py | 3 +- sf_message/models/sf_message_template.py | 1 + sf_message/models/sf_message_workorder.py | 17 +++++++++ 11 files changed, 68 insertions(+), 40 deletions(-) create mode 100644 sf_message/models/sf_message_product.py diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py index fcfcba8f..6796a50b 100644 --- a/sf_message/__manifest__.py +++ b/sf_message/__manifest__.py @@ -12,7 +12,7 @@ 'category': 'sf', 'website': 'https://www.sf.jikimo.com', 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_quality', 'mrp', - 'sf_manufacturing'], + 'sf_manufacturing','product'], 'data': [ 'data/bussiness_node.xml', 'data/cron_data.xml', diff --git a/sf_message/controllers/main.py b/sf_message/controllers/main.py index 5b94f50a..dc555dc9 100644 --- a/sf_message/controllers/main.py +++ b/sf_message/controllers/main.py @@ -39,12 +39,6 @@ class MessageSfMrsConnect(Sf_Mrs_Connect): _logger.info('无效用刀异常消息推送接口:%s' % ret) except Exception as e: _logger.info('无效用刀异常消息推送接口:%s' % e) - - try: - productions = request.env['mrp.production'].sudo().search([('id', '=', res.get('production_ids')[0])]) - productions.add_queue('工单已下发通知') - except Exception as e: - _logger.info('工单已下发通知异常:%s' % e) return json.JSONEncoder().encode(res) @http.route('/api/maintenance_logs/notify', type='json', auth='public', methods=['GET', 'POST'], csrf=False, diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 8a95f525..e7c3b0ba 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -56,7 +56,7 @@ 工单已下发通知 - mrp.production + product.product diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml index e1ba0a93..52b226e3 100644 --- a/sf_message/data/template_data.xml +++ b/sf_message/data/template_data.xml @@ -78,8 +78,8 @@ 工单已下发通知 - - mrp.production + + product.product markdown normal diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py index 1e659c52..8c215042 100644 --- a/sf_message/models/__init__.py +++ b/sf_message/models/__init__.py @@ -12,3 +12,4 @@ from . import sf_message_quality_cnc_test from . import sf_message_maintenance_logs from . import sf_message_mrp_production_wizard from . import sf_message_mrp_production_adjust_wizard +from . import sf_message_product diff --git a/sf_message/models/sf_message_mrp_production.py b/sf_message/models/sf_message_mrp_production.py index d9dd0f1b..260c591c 100644 --- a/sf_message/models/sf_message_mrp_production.py +++ b/sf_message/models/sf_message_mrp_production.py @@ -69,25 +69,16 @@ class SFMessageMrpProduction(models.Model): url_with_id).replace( '{{num}}', str(stock_picking_num)) contents.append(content) - if message_queue_id.message_template_id.name == '工单已下发通知': - content = message_queue_id.message_template_id.content - mrp_production = self.env['mrp.production'].sudo().search([('id', '=', int(message_queue_id.res_id))]) - production_num = self.env['mrp.production'].sudo().search_count( - [('product_id', '=', mrp_production.product_id.id)]) - if production_num >= 1: - url = self.get_request_url() - content = content.replace('{{product_id}}', mrp_production.product_id.name).replace( - '{{number}}', str(production_num)).replace( - '{{request_url}}', url) - contents.append(content) if unique_products: + action_id = self.env.ref('sf_plan.sf_production_plan_action1').id unique_products_contents = self.get_production_info(content, unique_products, 'confirmed', - 'sf_plan.sf_production_plan_action1') + action_id) contents.extend(unique_products_contents) if technology_to_confirmed: + action_id = self.env.ref('mrp.mrp_production_action').id technology_to_confirmed_contents = self.get_production_info(content, technology_to_confirmed, 'technology_to_confirmed', - 'mrp.mrp_production_action') + action_id) contents.extend(technology_to_confirmed_contents) logging.info('生产完工入库提醒: %s' % contents) return contents @@ -100,7 +91,6 @@ class SFMessageMrpProduction(models.Model): [('product_id', '=', products_id), ('state', '=', state)]) if production_num >= 1: url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - action_id = self.env.ref(action_id).id url_with_id = f"{url}/web#view_type=list&action={action_id}" new_content = (content.replace('{{name}}', product_name) .replace('{{url}}', url_with_id) @@ -120,17 +110,3 @@ class SFMessageMrpProduction(models.Model): # 拼接URL full_url = url + "/web#" + query_string return full_url - - def get_request_url(self): - url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - action_id = self.env.ref('sf_message.mrp_workorder_issued_action').id - menu_id = self.env.ref('mrp.menu_mrp_root').id - active_id = self.env['mrp.workcenter'].sudo().search([('name', '=', '工件装夹中心')]).id - # 查询参数 - params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.workorder', - 'view_type': 'list', 'active_id': active_id} - # 拼接查询参数 - query_string = urlencode(params) - # 拼接URL - full_url = url + "/web#" + query_string - return full_url diff --git a/sf_message/models/sf_message_mrp_production_wizard.py b/sf_message/models/sf_message_mrp_production_wizard.py index 0defae7e..990bdd49 100644 --- a/sf_message/models/sf_message_mrp_production_wizard.py +++ b/sf_message/models/sf_message_mrp_production_wizard.py @@ -11,7 +11,7 @@ class SFMessageMrpProductionWizard(models.TransientModel): productions = super(SFMessageMrpProductionWizard, self).confirm() try: for production_info in self.production_id: - if production_info.state == 'confirmed': + if production_info.state == 'confirmed' and production_info.product_id.categ_id.type == '成品': production_info.add_queue('待排程') for production_id in productions: workorder_ids = production_id.workorder_ids.filtered( diff --git a/sf_message/models/sf_message_product.py b/sf_message/models/sf_message_product.py new file mode 100644 index 00000000..4f983e49 --- /dev/null +++ b/sf_message/models/sf_message_product.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api, _ +from urllib.parse import urlencode + + +class SFMessagePlan(models.Model): + _name = 'product.product' + _inherit = ['product.product', 'jikimo.message.dispatch'] + + def _get_message(self, message_queue_ids): + contents = [] + for message_queue_id in message_queue_ids: + if message_queue_id.message_template_id.name == '工单已下发通知': + content = message_queue_id.message_template_id.content + product_product = self.env['product.product'].sudo().search([('id', '=', int(message_queue_id.res_id))]) + production_num = self.env['mrp.production'].sudo().search_count( + [('product_id', '=', product_product.id)]) + if production_num >= 1: + url = self.get_request_url() + content = content.replace('{{product_id}}', product_product.name).replace( + '{{number}}', str(production_num)).replace( + '{{request_url}}', url) + contents.append(content) + return contents + + def get_request_url(self): + url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + action_id = self.env.ref('sf_message.mrp_workorder_issued_action').id + menu_id = self.env.ref('mrp.menu_mrp_root').id + active_id = self.env['mrp.workcenter'].sudo().search([('name', '=', '工件装夹中心')]).id + # 查询参数 + params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.workorder', + 'view_type': 'list', 'active_id': active_id} + # 拼接查询参数 + query_string = urlencode(params) + # 拼接URL + full_url = url + "/web#" + query_string + return full_url diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index 5d15d34a..05bd6f3e 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -25,7 +25,8 @@ class SFMessageStockPicking(models.Model): super(SFMessageStockPicking, self)._compute_state() try: for record in self: - if record.state == 'assigned' and record.picking_type_id.sequence_code == 'PC': + if (record.state == 'assigned' and record.picking_type_id.sequence_code == 'PC' + and record.product_id.categ_id.type == '坯料'): record.add_queue('坯料发料提醒') if record.picking_type_id.sequence_code == 'SFP' and record.state == 'done': diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py index 87328849..d97c5467 100644 --- a/sf_message/models/sf_message_template.py +++ b/sf_message/models/sf_message_template.py @@ -17,4 +17,5 @@ class SfMessageTemplate(models.Model): res.append('sf.maintenance.logs') res.append('quality.cnc.test') res.append('mrp.production') + res.append('product.product') return res diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index c604534d..ee8f6c00 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -12,6 +12,23 @@ class SFMessageWork(models.Model): _name = 'mrp.workorder' _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] + @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state', + 'production_id.tool_state', 'production_id.schedule_state', 'sequence', + 'production_id.programming_state') + def _compute_state(self): + super(SFMessageWork, self)._compute_state() + for workorder in self: + work_ids = workorder.production_id.workorder_ids.filtered(lambda w: w.routing_type == '装夹预调') + if work_ids: + min_sequence_wk = work_ids.sorted(key=lambda w: w.sequence)[0] + if workorder.state == 'ready' and workorder.routing_type == '装夹预调' and workorder.id == min_sequence_wk.id: + message_template = self.env["jikimo.message.template"].sudo().search([("name", "=", '工单已下发通知')], limit=1) + jikimo_message_queue = self.env['jikimo.message.queue'].sudo().search( + [('res_id', '=', workorder.production_id.product_id.id), ("message_status", "in", ("pending", "sent")), + ('message_template_id', '=', message_template.id)]) + if not jikimo_message_queue: + workorder.production_id.product_id.add_queue('工单已下发通知') + def _get_message(self, message_queue_ids): contents = [] bussiness_node = None