From 2e3a9a8b80cf9381d3be6207224a966af02bfc8d Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 25 Sep 2024 11:18:37 +0800 Subject: [PATCH 001/108] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=90=E9=86=92?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 ++-- sf_sale/models/quick_easy_order.py | 4 ++-- sf_sale/models/quick_easy_order_old.py | 4 ++-- sf_tool_management/__manifest__.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index b18ab04c..9dc77bde 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 081807a4..cb1886a1 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 4756a2c5..9bd61132 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index 97c26e40..6c3a1e01 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -25,7 +25,7 @@ 'views/stock.xml', 'data/tool_data.xml', 'wizard/jikimo_bom_wizard.xml', - 'views/tool_inventory.xml', + # 'views/tool_inventory.xml', 'views/jikimo_bom.xml', 'views/tool_views.xml', From d63081dffa95a5bf90ff7e0abeeaf0dbcfdd4c26 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 25 Sep 2024 17:45:15 +0800 Subject: [PATCH 002/108] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=80=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95+=E5=B7=A5=E5=8D=95=E9=80=BE=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 +- sf_message/__manifest__.py | 5 +- sf_message/data/bussiness_node.xml | 51 +++++++ sf_message/data/cron_data.xml | 160 ++++++++++++++++++++ sf_message/models/sf_message_sale.py | 11 ++ sf_message/models/sf_message_workorder.py | 3 + sf_sale/models/quick_easy_order.py | 4 +- sf_sale/models/quick_easy_order_old.py | 4 +- sf_tool_management/__manifest__.py | 2 +- 9 files changed, 235 insertions(+), 9 deletions(-) create mode 100644 sf_message/data/cron_data.xml diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index b18ab04c..9dc77bde 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py index 0f032a6d..d69c06c1 100644 --- a/sf_message/__manifest__.py +++ b/sf_message/__manifest__.py @@ -11,9 +11,10 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify','stock'], + 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock'], 'data': [ - 'data/bussiness_node.xml' + 'data/bussiness_node.xml', + 'data/cron_data.xml', ], 'test': [ ], diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 7d66e8d2..fbad5581 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -1,6 +1,7 @@ + 待接单 sale.order @@ -10,6 +11,17 @@ 确认接单 sale.order + + + 销售订单逾期预警 + sale.order + + + + 销售订单已逾期 + sale.order + + 调拨入库 stock.picking @@ -30,9 +42,48 @@ 坯料发料提醒 stock.picking + + 工单已下发通知 mrp.workorder + + 装夹预调工单逾期预警 + mrp.workorder + + + 装夹预调工单已逾期 + mrp.workorder + + + + CNC工单逾期预警 + mrp.workorder + + + CNC工单已逾期 + mrp.workorder + + + + 解除装夹工单逾期预警 + mrp.workorder + + + + 解除装夹工单已逾期 + mrp.workorder + + + + 表面工艺工单逾期预警 + mrp.workorder + + + + 表面工艺工单已逾期 + mrp.workorder + \ No newline at end of file diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml new file mode 100644 index 00000000..f69dce7b --- /dev/null +++ b/sf_message/data/cron_data.xml @@ -0,0 +1,160 @@ + + + + 销售订单逾期预警 + + code + model._overdue_warning_func() + 1 + minutes + -1 + + + + + + + 销售订单已逾期 + + code + model._overdue_func() + 1 + minutes + -1 + + + + + + + 装夹预调工单逾期预警 + + code + model._overdue_warning_func() + 1 + minutes + -1 + + + + + + + 工单已逾期 + + code + model._overdue_func() + 1 + minutes + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index ef94b7fe..85a7fd3e 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import logging from odoo import models, fields, api, _ @@ -10,6 +11,7 @@ class SFMessageSale(models.Model): res = super(SFMessageSale, self).create(vals_list) if res: try: + logging.info('add_queue res:%s' % res) res.add_queue('待接单') except Exception as e: logging.info('add_queue error:%s' % e) @@ -45,3 +47,12 @@ class SFMessageSale(models.Model): if new_res: res = new_res return res + + # 销售订单逾期预警 + def _overdue_warning_func(self): + sale_order_ + return 1 + + # 销售订单已逾期 + def _overdue_func(self): + return 1 diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 2462b3f1..d1a4f06f 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -31,3 +31,6 @@ class SFMessageWork(models.Model): product_id.append(mrp_workorder_line.product_id.id) contents.append(content) return contents + + + diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 081807a4..cb1886a1 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 4756a2c5..9bd61132 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index 97c26e40..6c3a1e01 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -25,7 +25,7 @@ 'views/stock.xml', 'data/tool_data.xml', 'wizard/jikimo_bom_wizard.xml', - 'views/tool_inventory.xml', + # 'views/tool_inventory.xml', 'views/jikimo_bom.xml', 'views/tool_views.xml', From 7fef8f4c7781ad8d4686d4f2547b8359bd59342d Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 25 Sep 2024 17:50:00 +0800 Subject: [PATCH 003/108] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/__manifest__.py | 5 +- sf_message/data/bussiness_node.xml | 59 ++++++++++ sf_message/data/cron_data.xml | 160 +++++++++++++++++++++++++++ sf_message/models/sf_message_sale.py | 35 ++++-- 4 files changed, 249 insertions(+), 10 deletions(-) create mode 100644 sf_message/data/cron_data.xml diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py index 0f032a6d..d69c06c1 100644 --- a/sf_message/__manifest__.py +++ b/sf_message/__manifest__.py @@ -11,9 +11,10 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify','stock'], + 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock'], 'data': [ - 'data/bussiness_node.xml' + 'data/bussiness_node.xml', + 'data/cron_data.xml', ], 'test': [ ], diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 76f3fcb7..fbad5581 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -1,6 +1,7 @@ + 待接单 sale.order @@ -10,6 +11,17 @@ 确认接单 sale.order + + + 销售订单逾期预警 + sale.order + + + + 销售订单已逾期 + sale.order + + 调拨入库 stock.picking @@ -26,5 +38,52 @@ 坯料采购提醒 purchase.order + + 坯料发料提醒 + stock.picking + + + + + 工单已下发通知 + mrp.workorder + + + 装夹预调工单逾期预警 + mrp.workorder + + + 装夹预调工单已逾期 + mrp.workorder + + + + CNC工单逾期预警 + mrp.workorder + + + CNC工单已逾期 + mrp.workorder + + + + 解除装夹工单逾期预警 + mrp.workorder + + + + 解除装夹工单已逾期 + mrp.workorder + + + + 表面工艺工单逾期预警 + mrp.workorder + + + + 表面工艺工单已逾期 + mrp.workorder + \ No newline at end of file diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml new file mode 100644 index 00000000..f69dce7b --- /dev/null +++ b/sf_message/data/cron_data.xml @@ -0,0 +1,160 @@ + + + + 销售订单逾期预警 + + code + model._overdue_warning_func() + 1 + minutes + -1 + + + + + + + 销售订单已逾期 + + code + model._overdue_func() + 1 + minutes + -1 + + + + + + + 装夹预调工单逾期预警 + + code + model._overdue_warning_func() + 1 + minutes + -1 + + + + + + + 工单已逾期 + + code + model._overdue_func() + 1 + minutes + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index fb9d5976..85a7fd3e 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import logging from odoo import models, fields, api, _ @@ -10,6 +11,7 @@ class SFMessageSale(models.Model): res = super(SFMessageSale, self).create(vals_list) if res: try: + logging.info('add_queue res:%s' % res) res.add_queue('待接单') except Exception as e: logging.info('add_queue error:%s' % e) @@ -28,12 +30,29 @@ class SFMessageSale(models.Model): # 继承并重写jikimo.message.dispatch的_get_message() def _get_message(self, message_queue_ids): res = super(SFMessageSale, self)._get_message(message_queue_ids) - if message_queue_ids.message_template_id.bussiness_node_id.name == '确认接单': - # sale_order = self.env['sale.order'].search([('id', '=', message_queue_ids.model.res_id)]) - sale_order_line = self.env['sale.order.line'].search([('order_id', '=', int(message_queue_ids.res_id))]) - if len(sale_order_line) == 1: - product = sale_order_line[0].product_id.name - elif len(sale_order_line) > 1: - product = '%s...' % sale_order_line[0].product_id.name - res[0] = res[0].replace('{{product_id}}', product) + new_res = [] + processed_messages = set() # 用于跟踪已经处理过的消息 + for item in message_queue_ids: + if item.message_template_id.bussiness_node_id.name == '确认接单': + sale_order_line = self.env['sale.order.line'].search([('order_id', '=', int(item.res_id))]) + if len(sale_order_line) == 1: + product = sale_order_line[0].product_id.name + elif len(sale_order_line) > 1: + product = '%s...' % sale_order_line[0].product_id.name + for message in res: + message_text = message.replace('{{product_id}}', product) + if message_text not in processed_messages: + new_res.append(message_text) + processed_messages.add(message_text) + if new_res: + res = new_res return res + + # 销售订单逾期预警 + def _overdue_warning_func(self): + sale_order_ + return 1 + + # 销售订单已逾期 + def _overdue_func(self): + return 1 From bd2748659acfaf18c3236c023ae431db43b117df Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 25 Sep 2024 17:57:24 +0800 Subject: [PATCH 004/108] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=85=B3=E6=9C=BA?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/controllers/controllers.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index 1f65c884..98c8c37e 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -162,7 +162,7 @@ class Sf_Dashboard_Connect(http.Controller): # 关机时长:初次上线时间 - 通电时间 'power_off_time': power_off_time, # 关机率:关机时长/初次上线时间 - 'power_off_rate': power_off_rate, + # 'power_off_rate': power_off_rate, 'first_online_duration': first_online_duration, # 停机时间:关机时间 - 运行时间 # 停机时长:关机时间 - 初次上线时间 @@ -187,11 +187,11 @@ class Sf_Dashboard_Connect(http.Controller): """ res = {'status': 1, 'message': '成功', 'data': {}} logging.info('前端请求日志数据的参数为:%s' % kw) + # 连接数据库 + conn = psycopg2.connect(**db_config) + cur = conn.cursor() try: - # 连接数据库 - conn = psycopg2.connect(**db_config) - cur = conn.cursor() machine_list = ast.literal_eval(kw['machine_list']) begin_time_str = kw['begin_time'].strip('"') end_time_str = kw['end_time'].strip('"') @@ -231,6 +231,12 @@ class Sf_Dashboard_Connect(http.Controller): res['message'] = '前端请求日志数据失败,原因:%s' % e return json.dumps(res) + finally: + if cur: + cur.close() + if conn: + conn.close() + @http.route('/api/logs/page_data', type='http', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") def logs_page_data(self, **kw): @@ -242,11 +248,10 @@ class Sf_Dashboard_Connect(http.Controller): res = {'status': 1, 'message': '成功', 'data': {}} logging.info('前端请求日志数据的参数为:%s' % kw) + # 连接数据库 + conn = psycopg2.connect(**db_config) + cur = conn.cursor() try: - # 连接数据库 - conn = psycopg2.connect(**db_config) - cur = conn.cursor() - # 获取并解析传递的参数 machine_list = ast.literal_eval(kw.get('machine_list', '[]')) begin_time_str = kw.get('begin_time', '').strip('"') From 1d4188df7eeadfc158e3695a6391c4e7bcce7c05 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 26 Sep 2024 11:11:46 +0800 Subject: [PATCH 005/108] =?UTF-8?q?=E5=A2=9E=E5=8A=A024h=E7=9A=84=E6=95=85?= =?UTF-8?q?=E9=9A=9C=E6=97=B6=E9=97=B4=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/controllers/controllers.py | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index 98c8c37e..d8ed85c9 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -853,10 +853,10 @@ class Sf_Dashboard_Connect(http.Controller): ''' sql2 = ''' - SELECT DISTINCT ON (alarm_time) alarm_time, alarm_repair_time + SELECT DISTINCT ON (alarm_start_time) alarm_time, alarm_start_time FROM device_data - WHERE device_name = %s AND alarm_time IS NOT NULL - ORDER BY alarm_time, time; + WHERE device_name = %s AND alarm_start_time IS NOT NULL + ORDER BY alarm_start_time, time; ''' # 执行SQL命令 @@ -872,7 +872,7 @@ class Sf_Dashboard_Connect(http.Controller): res['data'][item] = {'idle_count': row[0]} alarm_count = [] for row in result2: - alarm_count.append(row[0]) + alarm_count.append(row[1]) total_alarm_time += abs(float(row[0])) if len(list(set(alarm_count))) == 1: if list(set(alarm_count))[0] is None: @@ -1238,6 +1238,8 @@ class Sf_Dashboard_Connect(http.Controller): machine_list = ast.literal_eval(kw['machine_list']) time_threshold = datetime.now() - timedelta(days=1) + alarm_last_24_time = 0.0 + def fetch_result_as_dict(cursor): """辅助函数:将查询结果转为字典""" columns = [desc[0] for desc in cursor.description] @@ -1262,13 +1264,25 @@ class Sf_Dashboard_Connect(http.Controller): LIMIT 1; """, (item, time_threshold)) last_24_time = fetch_result_as_dict(cur) + + with conn.cursor() as cur: + cur.execute(""" + SELECT DISTINCT ON (alarm_start_time) alarm_time, alarm_start_time + FROM device_data + WHERE device_name = %s + AND alarm_start_time IS NOT NULL AND time >= %s; + """, (item, time_threshold)) + results = cur.fetchall() + for result in results: + alarm_last_24_time += float(result[0]) # 返回数据 res['data'][item] = { 'wait_time': last_all_time['run_time'] if last_all_time['run_time'] is not None else 0, 'cut_time': last_all_time['process_time'] if last_all_time['process_time'] is not None else 0, 'cut_24_time': last_24_time['process_time'] if last_24_time['process_time'] is not None else 0, 'power_on_time': last_all_time['power_on_time'] if last_all_time['power_on_time'] is not None else 0, - 'power_on_24_time': last_24_time['power_on_time'] if last_24_time['power_on_time'] is not None else 0 + 'power_on_24_time': last_24_time['power_on_time'] if last_24_time['power_on_time'] is not None else 0, + 'alarm_last_24_time': alarm_last_24_time } conn.close() From 271e23a67f125550d7c8f58676807e4da897847b Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 26 Sep 2024 14:01:03 +0800 Subject: [PATCH 006/108] =?UTF-8?q?1=E3=80=81=E5=88=80=E5=85=B7=E6=A0=87?= =?UTF-8?q?=E5=87=86=E5=BA=93=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/models/sync_common.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 25d30333..0037ddcc 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -2676,7 +2676,8 @@ class CuttingToolBasicParameters(models.Model): 'interface_diameter': cutter_head_item['interface_diameter'], 'total_length': cutter_head_item['total_length'], 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'cutting_blade_length': cutter_head_item['cutting_blade_length'], + 'cut_depth_max': cutter_head_item['cutting_depth_max'], 'main_included_angle': cutter_head_item['edge_angle'], 'installing_structure': cutter_head_item['mounting_structure'], 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ @@ -2698,7 +2699,8 @@ class CuttingToolBasicParameters(models.Model): 'interface_diameter': cutter_head_item['interface_diameter'], 'total_length': cutter_head_item['total_length'], 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'cutting_blade_length': cutter_head_item['cutting_blade_length'], + 'cut_depth_max': cutter_head_item['cutting_depth_max'], 'main_included_angle': cutter_head_item['edge_angle'], 'installing_structure': cutter_head_item['mounting_structure'], 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ @@ -3031,7 +3033,8 @@ class CuttingToolBasicParameters(models.Model): 'interface_diameter': cutter_head_item['interface_diameter'], 'total_length': cutter_head_item['total_length'], 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'cutting_blade_length': cutter_head_item['cutting_blade_length'], + 'cut_depth_max': cutter_head_item['cutting_depth_max'], 'main_included_angle': cutter_head_item['edge_angle'], 'installing_structure': cutter_head_item['mounting_structure'], 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ @@ -3053,7 +3056,8 @@ class CuttingToolBasicParameters(models.Model): 'interface_diameter': cutter_head_item['interface_diameter'], 'total_length': cutter_head_item['total_length'], 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'cutting_blade_length': cutter_head_item['cutting_blade_length'], + 'cut_depth_max': cutter_head_item['cutting_depth_max'], 'main_included_angle': cutter_head_item['edge_angle'], 'installing_structure': cutter_head_item['mounting_structure'], 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ From 03405637497b926a9b6040e158f4797b56d91652 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 26 Sep 2024 14:04:35 +0800 Subject: [PATCH 007/108] =?UTF-8?q?=E7=AD=9B=E9=80=89=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E4=B8=8D=E4=B8=BA=E7=A9=BA=E7=9A=8424h?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/controllers/controllers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index d8ed85c9..b427aa5c 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -1250,7 +1250,7 @@ class Sf_Dashboard_Connect(http.Controller): cur.execute(""" SELECT * FROM device_data WHERE device_name = %s - AND device_state != '离线' + AND device_state != '离线' AND process_time IS NOT NULL ORDER BY time DESC LIMIT 1; """, (item,)) From eba9ccf08324dba9e1a0fd3d71bd4abb05ae8059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 26 Sep 2024 15:33:39 +0800 Subject: [PATCH 008/108] =?UTF-8?q?=E5=B1=8F=E8=94=BDtitle=E5=86=99?= =?UTF-8?q?=E6=AD=BBJIKIMO=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_frontend/static/src/bye_odoo/favicon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jikimo_frontend/static/src/bye_odoo/favicon.js b/jikimo_frontend/static/src/bye_odoo/favicon.js index 9ef4f4da..e37b967d 100644 --- a/jikimo_frontend/static/src/bye_odoo/favicon.js +++ b/jikimo_frontend/static/src/bye_odoo/favicon.js @@ -6,6 +6,6 @@ import { patch } from "web.utils"; patch(WebClient.prototype, "kolpolok_custom_title_and_favicon.WebClient", { setup() { this._super(); - this.title.setParts({ zopenerp: "JIKIMO" }); + // this.title.setParts({ zopenerp: "JIKIMO" }); }, }); \ No newline at end of file From 4d63b903738d28743f89c8d1bb0a4bc1eaceee0d Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 26 Sep 2024 16:36:49 +0800 Subject: [PATCH 009/108] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E7=BC=96=E7=A8=8B=E5=8D=95=E6=97=B6=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=88=A0=E9=99=A4CAM=E7=A8=8B=E5=BA=8F=E7=94=A8?= =?UTF-8?q?=E5=88=80=E8=AE=A1=E5=88=92=E8=AE=B0=E5=BD=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 4 ++-- sf_mrs_connect/controllers/controllers.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 0b68852b..59ce68ab 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -990,8 +990,8 @@ class MrpProduction(models.Model): panel_workorder.cmm_ids.sudo().unlink() if panel_workorder.cnc_ids: panel_workorder.cnc_ids.sudo().unlink() - self.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan( - production) + # self.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan( + # production) # program_path_tmp_panel = os.path.join('C://Users//43484//Desktop//fsdownload//test', # processing_panel) logging.info('program_path_tmp_panel:%s' % program_path_tmp_panel) diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index c5d1cd10..699bc35a 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -62,8 +62,8 @@ class Sf_Mrs_Connect(http.Controller): if cnc_workorder_has.cnc_ids: cnc_workorder_has.cmm_ids.sudo().unlink() cnc_workorder_has.cnc_ids.sudo().unlink() - request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan( - production) + # request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan( + # production) cnc_workorder_has.write( {'cnc_ids': cnc_workorder_has.cnc_ids.sudo()._json_cnc_processing(panel, ret), 'cmm_ids': cnc_workorder_has.cmm_ids.sudo()._json_cmm_program(panel, ret)}) From d84758232e79ed858deb90d37d1123732189df01 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Fri, 27 Sep 2024 09:20:19 +0800 Subject: [PATCH 010/108] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=80=BC=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/controllers/controllers.py | 22 +++++++++++++++---- .../views/maintenance_equipment_oee_views.xml | 6 ++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index b427aa5c..f38f473b 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -873,7 +873,10 @@ class Sf_Dashboard_Connect(http.Controller): alarm_count = [] for row in result2: alarm_count.append(row[1]) - total_alarm_time += abs(float(row[0])) + if row[0]: + total_alarm_time += abs(float(row[0])) + else: + total_alarm_time += 0.0 if len(list(set(alarm_count))) == 1: if list(set(alarm_count))[0] is None: alarm_count_num = 0 @@ -1245,7 +1248,12 @@ class Sf_Dashboard_Connect(http.Controller): columns = [desc[0] for desc in cursor.description] return dict(zip(columns, cursor.fetchone())) if cursor.rowcount != 0 else None + # 获取当前时间的时间戳 + current_timestamp = datetime.now().timestamp() for item in machine_list: + euipment_obj = request.env['maintenance.equipment'].sudo().search([('code', '=', item)]) + # 机床上线时间段 + first_online_duration = current_timestamp - euipment_obj.first_online_time.timestamp() with conn.cursor() as cur: cur.execute(""" SELECT * FROM device_data @@ -1259,7 +1267,7 @@ class Sf_Dashboard_Connect(http.Controller): cur.execute(""" SELECT * FROM device_data WHERE device_name = %s - AND device_state != '离线' AND time >= %s + AND device_state != '离线' AND time >= %s AND process_time IS NOT NULL ORDER BY time ASC LIMIT 1; """, (item, time_threshold)) @@ -1274,7 +1282,12 @@ class Sf_Dashboard_Connect(http.Controller): """, (item, time_threshold)) results = cur.fetchall() for result in results: - alarm_last_24_time += float(result[0]) + if result[0]: + if float(result[0]) >= 1000: + continue + alarm_last_24_time += float(result[0]) + else: + alarm_last_24_time += 0.0 # 返回数据 res['data'][item] = { 'wait_time': last_all_time['run_time'] if last_all_time['run_time'] is not None else 0, @@ -1282,7 +1295,8 @@ class Sf_Dashboard_Connect(http.Controller): 'cut_24_time': last_24_time['process_time'] if last_24_time['process_time'] is not None else 0, 'power_on_time': last_all_time['power_on_time'] if last_all_time['power_on_time'] is not None else 0, 'power_on_24_time': last_24_time['power_on_time'] if last_24_time['power_on_time'] is not None else 0, - 'alarm_last_24_time': alarm_last_24_time + 'alarm_last_24_time': alarm_last_24_time, + 'first_online_time': first_online_duration, } conn.close() diff --git a/sf_maintenance/views/maintenance_equipment_oee_views.xml b/sf_maintenance/views/maintenance_equipment_oee_views.xml index b798b0ab..22423be7 100644 --- a/sf_maintenance/views/maintenance_equipment_oee_views.xml +++ b/sf_maintenance/views/maintenance_equipment_oee_views.xml @@ -95,9 +95,9 @@