diff --git a/jikimo_workorder_exception/__init__.py b/jikimo_workorder_exception/__init__.py
new file mode 100644
index 00000000..c3d410ea
--- /dev/null
+++ b/jikimo_workorder_exception/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+from . import controllers
diff --git a/jikimo_workorder_exception/__manifest__.py b/jikimo_workorder_exception/__manifest__.py
new file mode 100644
index 00000000..4c63ed6d
--- /dev/null
+++ b/jikimo_workorder_exception/__manifest__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+ 'name': '机企猫 工单异常记录',
+ 'version': '1.0',
+ 'summary': '记录工单的异常日志',
+ 'sequence': 1,
+ 'category': 'sf',
+ 'website': 'https://www.sf.jikimo.com',
+ 'depends': ['sf_manufacturing', 'sf_mrs_connect'],
+ 'data': [
+ 'views/mrp_workorder_views.xml',
+ 'security/ir.model.access.csv',
+ ],
+ 'demo': [
+ ],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/jikimo_workorder_exception/controllers/__init__.py b/jikimo_workorder_exception/controllers/__init__.py
new file mode 100644
index 00000000..deec4a8b
--- /dev/null
+++ b/jikimo_workorder_exception/controllers/__init__.py
@@ -0,0 +1 @@
+from . import main
\ No newline at end of file
diff --git a/jikimo_workorder_exception/controllers/main.py b/jikimo_workorder_exception/controllers/main.py
new file mode 100644
index 00000000..6a17f958
--- /dev/null
+++ b/jikimo_workorder_exception/controllers/main.py
@@ -0,0 +1,89 @@
+from odoo import http, fields
+from odoo.http import request
+import json
+import logging
+from odoo.addons.sf_mrs_connect.controllers.controllers import Sf_Mrs_Connect
+from odoo.addons.sf_manufacturing.controllers.controllers import Manufacturing_Connect
+
+_logger = logging.getLogger(__name__)
+
+class WorkorderExceptionConroller(http.Controller):
+
+ @http.route('/AutoDeviceApi/BillError', type='json', auth='public', methods=['GET', 'POST'], csrf=False,
+ cors="*")
+ def workder_exception(self, **kw):
+ """
+ 记录工单异常
+ :param kw:
+ :return:
+ """
+ _logger.info('workder_exception:%s' % kw)
+ try:
+ res = {'Succeed': True, 'ErrorCode': 0, 'Error': ''}
+ datas = request.httprequest.data
+ ret = json.loads(datas)['Datas']
+ if not ret.get('RfidCode') or not ret.get('ErrorType'):
+ res = {'Succeed': False, 'ErrorCode': 400, 'Error': '参数错误'}
+ return json.JSONEncoder().encode(res)
+
+ # 通过RfidCode获取就绪的CNC工单
+ workorder = request.env['mrp.workorder'].sudo().search([
+ ('rfid_code', '=', ret['RfidCode']),
+ ('routing_type', '=', 'CNC加工'),
+ ])
+ if not workorder:
+ res = {'Succeed': False, 'ErrorCode': 401, 'Error': '无效的工单'}
+ return json.JSONEncoder().encode(res)
+
+ # 创建工单异常记录,关联工单
+ request.env['jikimo.workorder.exception'].sudo().create({
+ 'workorder_id': workorder.id,
+ 'exception_code': ret.get('ErrorType'),
+ 'exception_content': ret.get('Error', '')
+ })
+
+ except Exception as e:
+ res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
+ _logger.info('workder_exception error:%s' % e)
+ return json.JSONEncoder().encode(res)
+
+
+class SfMrsConnectController(Sf_Mrs_Connect):
+
+ @http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
+ cors="*")
+ def get_cnc_processing_create(self, **kw):
+ """
+ 更新工单异常记录【'YC001', 'YC004'】
+ """
+ res = super(SfMrsConnectController, self).get_cnc_processing_create(**kw)
+ # 如果有未完成的YC0001、YC0004异常记录,则标记为完成
+ res = json.loads(res)
+ _logger.info('已进入工单异常:%s' % res)
+ if res.get('production_ids'):
+ try:
+ productions = request.env['mrp.production'].sudo().search([('id', 'in', res.get('production_ids'))])
+ if productions.workorder_ids:
+ productions.workorder_ids.handle_exception(['YC0001', 'YC0004'])
+ except Exception as e:
+ _logger.info('更新工单异常记录失败:%s' % e)
+ return json.JSONEncoder().encode(res)
+
+class ManufactruingController(Manufacturing_Connect):
+
+ @http.route('/AutoDeviceApi/FeedBackStart', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
+ cors="*")
+ def button_Work_START(self, **kw):
+ """
+ 更新工单异常记录【'YC0002', 'YC0003'】
+ """
+ res = super(ManufactruingController, self).button_Work_START(**kw)
+ res = json.loads(res)
+ _logger.info('已进入工单异常:%s' % res)
+ if res.get('workorder_id'):
+ try:
+ workorder = request.env['mrp.workorder'].sudo().browse(int(res.get('workorder_id')))
+ workorder.handle_exception(['YC0002', 'YC0003'])
+ except Exception as e:
+ _logger.info('更新工单异常记录失败:%s' % e)
+ return json.JSONEncoder().encode(res)
\ No newline at end of file
diff --git a/jikimo_workorder_exception/models/__init__.py b/jikimo_workorder_exception/models/__init__.py
new file mode 100644
index 00000000..9ab4d803
--- /dev/null
+++ b/jikimo_workorder_exception/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import jikimo_workorder_exception
+from . import mrp_workorder
diff --git a/jikimo_workorder_exception/models/jikimo_workorder_exception.py b/jikimo_workorder_exception/models/jikimo_workorder_exception.py
new file mode 100644
index 00000000..19dd824b
--- /dev/null
+++ b/jikimo_workorder_exception/models/jikimo_workorder_exception.py
@@ -0,0 +1,14 @@
+from odoo import models, fields
+
+
+class JikimoWorkorderException(models.Model):
+ _name = 'jikimo.workorder.exception'
+ _description = '工单异常记录'
+ _order = 'id desc'
+
+ workorder_id = fields.Many2one('mrp.workorder', string='工单')
+ exception_code = fields.Char('异常编码')
+ exception_content = fields.Char('反馈的异常/问题信息')
+ completion_time = fields.Datetime('处理完成时间')
+ state = fields.Selection([('pending', '进行中'), ('done', '已处理')], string='状态', default='pending')
+
\ No newline at end of file
diff --git a/jikimo_workorder_exception/models/mrp_workorder.py b/jikimo_workorder_exception/models/mrp_workorder.py
new file mode 100644
index 00000000..64f0dd8f
--- /dev/null
+++ b/jikimo_workorder_exception/models/mrp_workorder.py
@@ -0,0 +1,40 @@
+from odoo import models, fields
+import logging
+
+_logger = logging.getLogger(__name__)
+
+class MrpWorkorder(models.Model):
+ _inherit = 'mrp.workorder'
+
+ exception_ids = fields.One2many('jikimo.workorder.exception', 'workorder_id', string='工单异常记录')
+
+ def write(self, values):
+ if values.get('test_results') and self.exception_ids:
+ pending_exception = self.exception_ids.filtered(
+ lambda exc: exc.state == 'pending' and exc.exception_code == 'YC0005'
+ )
+ if pending_exception:
+ pending_exception.write({
+ 'completion_time': fields.Datetime.now(),
+ 'state': 'done'
+ })
+ return super(MrpWorkorder, self).write(values)
+
+ def handle_exception(self, exception_codes):
+ """
+ 处理异常
+ :param exception_codes: 需要处理的异常编码列表
+ """
+ if not isinstance(exception_codes, list):
+ exception_codes = [exception_codes]
+ if self.exception_ids:
+ _logger.info('workorder.exception_ids:%s' % self.exception_ids)
+ pending_exception = self.exception_ids.filtered(
+ lambda exc: exc.state == 'pending' and exc.exception_code in exception_codes
+ )
+ _logger.info('pending_exception:%s' % pending_exception)
+ if pending_exception:
+ pending_exception.write({
+ 'completion_time': fields.Datetime.now(),
+ 'state': 'done'
+ })
diff --git a/jikimo_workorder_exception/security/ir.model.access.csv b/jikimo_workorder_exception/security/ir.model.access.csv
new file mode 100644
index 00000000..bbc066e4
--- /dev/null
+++ b/jikimo_workorder_exception/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_jikimo_workorder_exception","access.jikimo.workorder.exception","model_jikimo_workorder_exception","mrp.group_mrp_user",1,1,1,0
diff --git a/jikimo_workorder_exception/tests/__init__.py b/jikimo_workorder_exception/tests/__init__.py
new file mode 100644
index 00000000..99feb117
--- /dev/null
+++ b/jikimo_workorder_exception/tests/__init__.py
@@ -0,0 +1,2 @@
+from . import common
+from . import test_jikimo_workorder_exception
diff --git a/jikimo_workorder_exception/tests/common.py b/jikimo_workorder_exception/tests/common.py
new file mode 100644
index 00000000..bbc729db
--- /dev/null
+++ b/jikimo_workorder_exception/tests/common.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import fields, Command
+from odoo.tests.common import TransactionCase, HttpCase, tagged, Form
+
+import json
+import time
+import base64
+from lxml import etree
+
+@tagged('post_install', '-at_install')
+class TestJikimoWorkorderExceptionCommon(TransactionCase):
+
+ def setUp(self):
+ super(TestJikimoWorkorderExceptionCommon, self).setUp()
+ # 获取名字为“1#自动生产线”的制造中心
+ workcenter = self.env['mrp.workcenter'].search([('name', '=', '1#自动生产线')], limit=1)
+ # 创建一个产品
+ product_product = self.env['product.product'].create({
+ 'name': '测试产品',
+ 'type': 'product',
+ })
+ uom_unit = self.env.ref('uom.product_uom_unit')
+ # 创建一个bom
+ self.bom = self.env['mrp.bom'].create({
+ 'product_id': product_product.id,
+ 'product_tmpl_id': product_product.product_tmpl_id.id,
+ 'product_uom_id': uom_unit.id,
+ 'product_qty': 1.0,
+ 'type': 'normal',
+ })
+ # 创建一个制造订单
+ self.production = self.env['mrp.production'].create({
+ 'name': 'Test Production',
+ 'product_id': product_product.id,
+ 'bom_id': self.bom.id,
+ 'company_id': self.env.ref('base.main_company').id,
+ })
+ # 创建一个测试工单
+ self.workorder = self.env['mrp.workorder'].create({
+ 'name': 'Test order',
+ 'workcenter_id': workcenter.id,
+ 'product_uom_id': self.bom.product_uom_id.id,
+ 'production_id': self.production.id,
+ 'duration_expected': 1.0,
+ 'rfid_code': 'test-123456',
+ 'routing_type': 'CNC加工'
+ })
\ No newline at end of file
diff --git a/jikimo_workorder_exception/tests/test_jikimo_workorder_exception.py b/jikimo_workorder_exception/tests/test_jikimo_workorder_exception.py
new file mode 100644
index 00000000..69220947
--- /dev/null
+++ b/jikimo_workorder_exception/tests/test_jikimo_workorder_exception.py
@@ -0,0 +1,53 @@
+import json
+from datetime import datetime
+from odoo.addons.jikimo_workorder_exception.tests.common import TestJikimoWorkorderExceptionCommon
+
+class TestJikimoWorkorderException(TestJikimoWorkorderExceptionCommon):
+
+ def test_create_exception_record(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0001',
+ 'exception_content': '无CNC编程'
+ })
+
+ self.assertTrue(exception_record)
+ self.assertEqual(exception_record.exception_content, '无CNC编程')
+ self.assertEqual(exception_record.workorder_id.id, self.workorder.id)
+ self.assertEqual(exception_record.exception_code, 'YC0001')
+
+ def test_handle_exception(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0001',
+ 'exception_content': '无CNC编程'
+ })
+ self.workorder.handle_exception('YC0001')
+ self.assertEqual(exception_record.state, 'done')
+ # 判断完成时间是否为当前分钟
+ self.assertEqual(exception_record.completion_time.minute, datetime.now().minute)
+
+ def test_handle_exception_with_invalid_code(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0001',
+ 'exception_content': '无CNC编程'
+ })
+ self.workorder.handle_exception(['YC0002', 'YC0004'])
+ self.assertEqual(exception_record.state, 'pending')
+ self.assertEqual(exception_record.completion_time, False)
+
+
+ def test_handle_exception_with_test_results(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0005',
+ 'exception_content': '工单加工失败'
+ })
+ self.workorder.write({
+ 'test_results': '返工',
+ 'reason': 'cutter',
+ 'detailed_reason': '刀坏了',
+ })
+ self.assertEqual(exception_record.state, 'done')
+ self.assertEqual(exception_record.completion_time.minute, datetime.now().minute)
\ No newline at end of file
diff --git a/jikimo_workorder_exception/views/mrp_workorder_views.xml b/jikimo_workorder_exception/views/mrp_workorder_views.xml
new file mode 100644
index 00000000..e589adb4
--- /dev/null
+++ b/jikimo_workorder_exception/views/mrp_workorder_views.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ mrp.workorder.form
+ mrp.workorder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jikimo_workorder_exception_notify/__init__.py b/jikimo_workorder_exception_notify/__init__.py
new file mode 100644
index 00000000..77bbdbd3
--- /dev/null
+++ b/jikimo_workorder_exception_notify/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+
diff --git a/jikimo_workorder_exception_notify/__manifest__.py b/jikimo_workorder_exception_notify/__manifest__.py
new file mode 100644
index 00000000..0b8c1013
--- /dev/null
+++ b/jikimo_workorder_exception_notify/__manifest__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+ 'name': '机企猫 工单异常消息通知',
+ 'version': '1.0',
+ 'summary': '当产生工单异常时,发送消息通知',
+ 'sequence': 1,
+ 'category': 'sf',
+ 'website': 'https://www.sf.jikimo.com',
+ 'depends': ['jikimo_workorder_exception', 'jikimo_message_notify'],
+ 'data': [
+ 'data/bussiness_node.xml',
+ 'data/template_data.xml',
+ # 'security/ir.model.access.csv',
+ ],
+ 'demo': [
+ ],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/jikimo_workorder_exception_notify/data/bussiness_node.xml b/jikimo_workorder_exception_notify/data/bussiness_node.xml
new file mode 100644
index 00000000..b772158b
--- /dev/null
+++ b/jikimo_workorder_exception_notify/data/bussiness_node.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ 无功能刀具
+ jikimo.workorder.exception
+
+
+ 无定位数据
+ jikimo.workorder.exception
+
+
+ 加工失败
+ jikimo.workorder.exception
+
+
+
\ No newline at end of file
diff --git a/jikimo_workorder_exception_notify/data/template_data.xml b/jikimo_workorder_exception_notify/data/template_data.xml
new file mode 100644
index 00000000..554ef2c2
--- /dev/null
+++ b/jikimo_workorder_exception_notify/data/template_data.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ 生产线无功能刀具提醒
+
+ jikimo.workorder.exception
+
+ markdown
+ urgent
+ ### 生产线无功能刀具提醒
+单号:工单[{{workorder_id.production_id.name}}]({{url}})
+原因:生产线无加工程序用的{{function_tool_name}}名称功能刀具
+
+
+ 工单无定位数据提醒
+
+ jikimo.workorder.exception
+
+ markdown
+ urgent
+ ### 生产线无功能刀具提醒
+单号:工单[{{workorder_id.production_id.name}}]({{url}})
+原因:无装夹定位测量数据
+
+
+ 工单加工失败提醒
+
+ jikimo.workorder.exception
+
+ markdown
+ urgent
+ ### 工单加工失败提醒
+单号:工单[{{workorder_id.production_id.name}}]({{url}})
+原因:加工失败,工件下产线处理
+
+
+
\ No newline at end of file
diff --git a/jikimo_workorder_exception_notify/models/__init__.py b/jikimo_workorder_exception_notify/models/__init__.py
new file mode 100644
index 00000000..76a90c74
--- /dev/null
+++ b/jikimo_workorder_exception_notify/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import jikimo_message_template
+from . import jikimo_workorder_exception
diff --git a/jikimo_workorder_exception_notify/models/jikimo_message_template.py b/jikimo_workorder_exception_notify/models/jikimo_message_template.py
new file mode 100644
index 00000000..530cbb99
--- /dev/null
+++ b/jikimo_workorder_exception_notify/models/jikimo_message_template.py
@@ -0,0 +1,10 @@
+from odoo import models
+
+
+class JikimoMessageTemplate(models.Model):
+ _inherit = "jikimo.message.template"
+
+ def _get_message_model(self):
+ res = super(JikimoMessageTemplate, self)._get_message_model()
+ res.append('jikimo.workorder.exception')
+ return res
\ No newline at end of file
diff --git a/jikimo_workorder_exception_notify/models/jikimo_workorder_exception.py b/jikimo_workorder_exception_notify/models/jikimo_workorder_exception.py
new file mode 100644
index 00000000..bbe69ab5
--- /dev/null
+++ b/jikimo_workorder_exception_notify/models/jikimo_workorder_exception.py
@@ -0,0 +1,61 @@
+from odoo import models, api
+from odoo.addons.sf_base.commons.common import Common
+import requests, logging
+
+_logger = logging.getLogger(__name__)
+
+
+class JikimoWorkorderException(models.Model):
+ _name = 'jikimo.workorder.exception'
+ _inherit = ['jikimo.workorder.exception', 'jikimo.message.dispatch']
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ res = super(JikimoWorkorderException, self).create(vals_list)
+ # 根据异常编码发送消息提醒
+ try:
+ for rec in res:
+ if rec.exception_code == 'YC0001':
+ # 无CNC程序,调用cloud接口
+ data = {'name': rec.workorder_id.production_id.programming_no, 'exception_code': 'YC0001'}
+ configsettings = self.env['res.config.settings'].sudo().get_values()
+ config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key'])
+ url = '/api/message/workorder_exception'
+ config_url = configsettings['sf_url'] + url
+ data['token'] = configsettings['token']
+ ret = requests.post(config_url, json=data, headers=config_header)
+ ret = ret.json()
+ _logger.info('无CNC程序异常消息推送接口:%s' % ret)
+ elif rec.exception_code == 'YC0002':
+ # 无功能刀具
+ rec.add_queue('无功能刀具')
+ elif rec.exception_code == 'YC0003':
+ # 无定位数据
+ rec.add_queue('无定位数据')
+ elif rec.exception_code == 'YC0004':
+ # 无FTP文件,调用cloud接口
+ data = {'name': rec.workorder_id.programming_no, 'exception_code': 'YC0004'}
+ configsettings = self.env['res.config.settings'].sudo().get_values()
+ config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key'])
+ url = '/api/message/workorder_exception'
+ config_url = configsettings['sf_url'] + url
+ data['token'] = configsettings['token']
+ ret = requests.post(config_url, json=data, headers=config_header)
+ ret = ret.json()
+ _logger.info('无FTP文件异常消息推送接口:%s' % ret)
+ elif rec.exception_code == 'YC0005':
+ # 加工失败
+ rec.add_queue('加工失败')
+ except Exception as e:
+ _logger.error('异常编码发送消息提醒失败:%s' % e)
+ return res
+
+ def _get_message(self, message_queue_ids):
+ contents = super(JikimoWorkorderException, self)._get_message(message_queue_ids)
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
+ action_id = self.env.ref('mrp.mrp_production_action').id
+ for index, content in enumerate(contents):
+ exception_id = self.env['jikimo.workorder.exception'].browse(message_queue_ids[index].res_id)
+ url = url + '/web#id=%s&view_type=form&action=%s' % (exception_id.workorder_id.production_id.id, action_id)
+ contents[index] = content.replace('{{url}}', url)
+ return contents
diff --git a/jikimo_workorder_exception_notify/tests/__init__.py b/jikimo_workorder_exception_notify/tests/__init__.py
new file mode 100644
index 00000000..318a4c8a
--- /dev/null
+++ b/jikimo_workorder_exception_notify/tests/__init__.py
@@ -0,0 +1,2 @@
+from . import common
+from . import test_jikimo_workorder_exception_notify
diff --git a/jikimo_workorder_exception_notify/tests/common.py b/jikimo_workorder_exception_notify/tests/common.py
new file mode 100644
index 00000000..5fefe6bf
--- /dev/null
+++ b/jikimo_workorder_exception_notify/tests/common.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import fields, Command
+from odoo.tests.common import TransactionCase, HttpCase, tagged, Form
+
+import json
+import time
+import base64
+from lxml import etree
+
+@tagged('post_install', '-at_install')
+class TestJikimoWorkorderExceptionNotifyCommonNotify(TransactionCase):
+
+ def setUp(self):
+ super(TestJikimoWorkorderExceptionNotifyCommonNotify, self).setUp()
+ # 获取最后一个工单
+ self.workorder = self.env['mrp.workorder'].search([], order='id desc', limit=1)
+
\ No newline at end of file
diff --git a/jikimo_workorder_exception_notify/tests/test_jikimo_workorder_exception_notify.py b/jikimo_workorder_exception_notify/tests/test_jikimo_workorder_exception_notify.py
new file mode 100644
index 00000000..85d304be
--- /dev/null
+++ b/jikimo_workorder_exception_notify/tests/test_jikimo_workorder_exception_notify.py
@@ -0,0 +1,62 @@
+import json
+from datetime import datetime
+from odoo.addons.jikimo_workorder_exception_notify.tests.common import TestJikimoWorkorderExceptionNotifyCommonNotify
+
+class TestJikimoWorkorderExceptionNotify(TestJikimoWorkorderExceptionNotifyCommonNotify):
+
+ def test_create_message_template(self):
+ self.assertTrue(self.env['jikimo.message.template'].search([
+ ('name', '=', '生产线无功能刀具提醒'),
+ ('model', '=', 'jikimo.workorder.exception')
+ ]))
+ self.assertTrue(self.env['jikimo.message.template'].search([
+ ('name', '=', '工单无定位数据提醒'),
+ ('model', '=', 'jikimo.workorder.exception')
+ ]))
+ self.assertTrue(self.env['jikimo.message.template'].search([
+ ('name', '=', '加工失败'),
+ ('model', '=', 'jikimo.workorder.exception')
+ ]))
+
+
+ def test_create_message_queue(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0002',
+ 'exception_content': '无功能刀具'
+ })
+
+ bussiness_node = self.env['jikimo.message.bussiness.node'].search([
+ ('name', '=', '无功能刀具'),
+ ('model', '=', 'jikimo.workorder.exception')
+ ])
+
+ message_template = self.env['jikimo.message.template'].search([
+ ('bussiness_node_id', '=', bussiness_node.id),
+ ('model', '=', 'jikimo.workorder.exception')
+ ])
+
+ message_record = self.env['jikimo.message.queue'].search([
+ ('res_id', '=', exception_record.id),
+ ('model', '=', 'jikimo.workorder.exception'),
+ ('message_status', '=', 'pending'),
+ ('message_template_id', '=', message_template.id)
+ ])
+ self.assertTrue(message_record)
+
+
+ def test_get_message(self):
+ exception_record = self.env['jikimo.workorder.exception'].create({
+ 'workorder_id': self.workorder.id,
+ 'exception_code': 'YC0002',
+ 'exception_content': '无功能刀具'
+ })
+ message_queue_ids = self.env['jikimo.message.queue'].search([
+ ('res_id', '=', exception_record.id),
+ ('model', '=', 'jikimo.workorder.exception'),
+ ('message_status', '=', 'pending')
+ ])
+ message = self.env['jikimo.workorder.exception']._get_message(message_queue_ids)
+ self.assertTrue(message)
+
+
diff --git a/sf_base/controllers/controllers.py b/sf_base/controllers/controllers.py
index 71ed8f94..47c67322 100644
--- a/sf_base/controllers/controllers.py
+++ b/sf_base/controllers/controllers.py
@@ -38,3 +38,17 @@ class Manufacturing_Connect(http.Controller):
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
logging.info('get_maintenance_tool_groups_Info error:%s' % e)
return json.JSONEncoder().encode(res)
+
+
+class MultiInheritController():
+ _sub_classes = []
+
+ def __init_subclass__(cls):
+ """
+ 多继承,解决多个字类时方法调用super的问题
+ """
+ super().__init_subclass__()
+ if len(cls._sub_classes) > 0 and cls not in cls._sub_classes:
+ cls.__bases__ = (cls._sub_classes[-1],)
+ if cls not in cls._sub_classes:
+ cls._sub_classes.append(cls)
diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py
index a65e97ef..ab03dff2 100644
--- a/sf_machine_connect/controllers/controllers.py
+++ b/sf_machine_connect/controllers/controllers.py
@@ -402,20 +402,45 @@ class Sf_Dashboard_Connect(http.Controller):
try:
plan_obj = request.env['sf.production.plan'].sudo()
production_obj = request.env['mrp.production'].sudo()
+ work_order_obj = request.env['mrp.workorder'].sudo()
line_list = ast.literal_eval(kw['line_list'])
# print('line_list: %s' % line_list)
for line in line_list:
- # 工单计划量
- plan_data_total_counts = production_obj.search_count(
- [('production_line_id.name', '=', line), ('state', 'not in', ['cancel']),
- ('active', '=', True)])
- # 工单完成量
- plan_data_finish_counts = plan_obj.search_count(
- [('production_line_id.name', '=', line), ('state', 'in', ['finished'])])
# # 工单计划量
- # plan_data_plan_counts = plan_obj.search_count(
- # [('production_line_id.name', '=', line), ('state', 'not in', ['finished'])])
+ # plan_data_total_counts = production_obj.search_count(
+ # [('production_line_id.name', '=', line), ('state', 'not in', ['cancel']),
+ # ('active', '=', True)])
+
+ # 工单计划量切换为CNC工单
+ plan_data_total_counts = work_order_obj.search_count(
+ [('production_id.production_line_id.name', '=', line),
+ ('state', 'in', ['ready', 'progress', 'done']), ('routing_type', '=', 'CNC加工')])
+
+ # # 工单完成量
+ # plan_data_finish_counts = plan_obj.search_count(
+ # [('production_line_id.name', '=', line), ('state', 'in', ['finished'])])
+
+ # 工单完成量切换为CNC工单
+ plan_data_finish_counts = work_order_obj.search_count(
+ [('production_id.production_line_id.name', '=', line),
+ ('state', 'in', ['done']), ('routing_type', '=', 'CNC加工')])
+
+ # 超期完成量
+ # 搜索所有已经完成的工单
+ plan_data_overtime = work_order_obj.search([
+ ('production_id.production_line_id.name', '=', line),
+ ('state', 'in', ['done']),
+ ('routing_type', '=', 'CNC加工')
+ ])
+
+ # 使用 filtered 进行字段比较
+ plan_data_overtime_counts = plan_data_overtime.filtered(
+ lambda order: order.date_finished > order.date_planned_finished
+ )
+
+ # 获取数量
+ plan_data_overtime_counts = len(plan_data_overtime_counts)
# 查找符合条件的生产计划记录
plan_data = plan_obj.search([
@@ -517,7 +542,10 @@ class Sf_Dashboard_Connect(http.Controller):
'on_time_rate': on_time_rate,
# 'detection_data': detection_data,
'detection_data': plan_data_finish_counts,
- 'pass_rate': (plan_data_finish_counts - plan_data_fault_counts) / plan_data_finish_counts
+ 'pass_rate': (plan_data_finish_counts - plan_data_fault_counts) / plan_data_finish_counts,
+ 'plan_data_overtime_counts': plan_data_overtime_counts,
+ 'overtime_rate': plan_data_overtime_counts / plan_data_finish_counts
+ if plan_data_finish_counts > 0 else 0,
}
res['data'][line] = data
@@ -1244,6 +1272,7 @@ class Sf_Dashboard_Connect(http.Controller):
time_threshold = datetime.now() - timedelta(days=1)
alarm_last_24_time = 0.0
+ alarm_all_time = 0.0
def fetch_result_as_dict(cursor):
"""辅助函数:将查询结果转为字典"""
@@ -1304,6 +1333,35 @@ class Sf_Dashboard_Connect(http.Controller):
alarm_last_24_time += float(result[0])
else:
alarm_last_24_time += 0.0
+
+ alarm_all_nums = []
+ 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;
+ """, (item,))
+ results = cur.fetchall()
+ for result in results:
+ alarm_all_nums.append(result[1])
+ if result[0]:
+ if float(result[0]) >= 1000:
+ continue
+ alarm_all_time += float(result[0])
+ else:
+ alarm_all_time += 0.0
+
+ # with conn.cursor() as cur:
+ # cur.execute("""
+ # SELECT * FROM device_data
+ # WHERE device_name = %s
+ # AND total_count IS NOT NULL
+ # ORDER BY time ASC
+ # LIMIT 1;
+ # """, (item, ))
+ # total_count = fetch_result_as_dict(cur)
+
# 返回数据
res['data'][item] = {
'wait_time': last_all_time['run_time'] if last_all_time['run_time'] is not None else 0,
@@ -1315,6 +1373,9 @@ class Sf_Dashboard_Connect(http.Controller):
'alarm_last_24_nums': len(list(set(alarm_last_24_nums))),
'idle_count': idle_count,
'first_online_time': first_online_duration,
+ 'alarm_all_time': alarm_all_time,
+ 'alarm_all_nums': len(list(set(alarm_all_nums)))
+ # 'total_count': total_count['total_count'] if total_count else 0
}
conn.close()
diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py
index 595a5d25..88c53ff8 100644
--- a/sf_maintenance/__manifest__.py
+++ b/sf_maintenance/__manifest__.py
@@ -11,6 +11,7 @@
'security/group_security.xml',
'security/ir.model.access.csv',
'security/ir_rule_data.xml',
+ 'data/scheduled_actions.xml',
'views/maintenance_logs_views.xml',
'views/maintenance_equipment_oee_views.xml',
'views/maintenance_views.xml',
diff --git a/sf_maintenance/data/scheduled_actions.xml b/sf_maintenance/data/scheduled_actions.xml
new file mode 100644
index 00000000..f75b5263
--- /dev/null
+++ b/sf_maintenance/data/scheduled_actions.xml
@@ -0,0 +1,14 @@
+
+
+
+ 设备运行数据
+
+ code
+ model.get_running_datas()
+ 15
+ minutes
+ -1
+
+
+
+
diff --git a/sf_maintenance/i18n/zh_CN.po b/sf_maintenance/i18n/zh_CN.po
new file mode 100644
index 00000000..2cf42b3d
--- /dev/null
+++ b/sf_maintenance/i18n/zh_CN.po
@@ -0,0 +1,3583 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_maintenance
+# * sf_maintenance
+# * maintenance
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-10-17 01:14+0000\n"
+"PO-Revision-Date: 2024-10-17 01:14+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_oee_form
+msgid "24H日志详情"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__2轴
+msgid "2轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__3轴
+msgid "3轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__4轴
+msgid "4轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__5轴
+msgid "5轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__6轴
+msgid "6轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__7轴
+msgid "7轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_axis_num__8轴
+msgid "8轴"
+msgstr ""
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+msgid "Category:"
+msgstr "类别:"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Model Number:"
+msgstr "型号 :"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+msgid "Request to:"
+msgstr "请求:"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Serial Number:"
+msgstr "序列号:"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid ""
+msgstr ""
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Canceled"
+msgstr "取消"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "hours"
+msgstr "小时"
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid " "
+msgstr ""
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Reporting"
+msgstr "报告"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Requests"
+msgstr "请求"
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "h "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "i "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "kg "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "kw "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "m "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "m/S "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "mm "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "° "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "μm "
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "倍 "
+msgstr ""
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.view_maintenance_equipment_category_kanban
+msgid "Equipments:"
+msgstr "设备:"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.view_maintenance_equipment_category_kanban
+msgid "Maintenance:"
+msgstr "维护:"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_defaults
+msgid ""
+"A Python dictionary that will be evaluated to provide default values when "
+"creating new records for this alias."
+msgstr "为该别名创建新记录时,将对其进行评估以提供默认值的Python字典。"
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__equipment_type__agv小车
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_category__equipment_type__agv小车
+msgid "AGV小车"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_W
+msgid "AGV尺寸(宽)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_L
+msgid "AGV尺寸(长)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_H
+msgid "AGV尺寸(高)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_load_weight_max
+msgid "AGV最大负载重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_weight
+msgid "AGV本体总重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_power_requirements
+msgid "AGV电源要求"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment_agv_log
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__agv_logs
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "AGV运行日志"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_drive_mode
+msgid "AGV驱动方式"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_needaction
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_needaction
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_needaction
+msgid "Action Needed"
+msgstr "需要动作"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__active
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__active
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__active
+msgid "Active"
+msgstr "启用"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_ids
+msgid "Activities"
+msgstr "活动"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_exception_decoration
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr "活动异常勋章"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_state
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_state
+msgid "Activity State"
+msgstr "活动状态"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_type_icon
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_type_icon
+msgid "Activity Type Icon"
+msgstr "活动类型图表"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.mail_activity_type_action_config_maintenance
+#: model:ir.ui.menu,name:maintenance.maintenance_menu_config_activity_type
+msgid "Activity Types"
+msgstr "活动类型"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_action
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_action_from_category_form
+msgid "Add a new equipment"
+msgstr "添加新设备"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_category_action
+msgid "Add a new equipment category"
+msgstr "添加新设备类别"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_cal
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_from_equipment
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_link
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_todo_request_action_from_dashboard
+#: model_terms:ir.actions.act_window,help:maintenance.maintenance_request_action_reports
+msgid "Add a new maintenance request"
+msgstr "添加新的保养请求"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_stage_action
+#: model_terms:ir.actions.act_window,help:maintenance.maintenance_dashboard_action
+msgid "Add a new stage in the maintenance request"
+msgstr "在保养请求中添加新阶段"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.maintenance_team_action_settings
+msgid "Add a team in the maintenance request"
+msgstr "在维护请求中添加团队"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_id
+msgid "Alias"
+msgstr "别名"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_contact
+msgid "Alias Contact Security"
+msgstr "安全联系人别名"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_name
+msgid "Alias Name"
+msgstr "别名"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_domain
+msgid "Alias domain"
+msgstr "域名别名"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_model_id
+msgid "Aliased Model"
+msgstr "模型别名"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "All"
+msgstr "全部"
+
+#. module: maintenance
+#: model:ir.model.constraint,message:maintenance.constraint_maintenance_equipment_serial_no
+msgid "Another asset already exists with this serial number!"
+msgstr "已经有资产用到该序列号"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__archive
+msgid "Archive"
+msgstr "存档"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_search
+msgid "Archived"
+msgstr "已归档"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_tree
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_tree
+msgid "Assign To User"
+msgstr "指派给用户"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Assigned"
+msgstr "已指派"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__assign_date
+msgid "Assigned Date"
+msgstr "分配日期"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_maintenance_equipment__department_id
+msgid "Assigned Department"
+msgstr "分配部门"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_maintenance_equipment__employee_id
+msgid "Assigned Employee"
+msgstr "分配员工"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_res_users__equipment_count
+msgid "Assigned Equipments"
+msgstr "分配设备"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "Assigned to"
+msgstr "分派给"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_attachment_count
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_attachment_count
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_attachment_count
+msgid "Attachment Count"
+msgstr "附件数量"
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__knife_type__bt30
+msgid "BT30"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__knife_type__bt40
+msgid "BT40"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__knife_type__bt50
+msgid "BT50"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__kanban_state__blocked
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Blocked"
+msgstr "暂停"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__b_axis
+msgid "B轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__C_tool_time
+msgid "C-C换刀时间(s)"
+msgstr ""
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Cancel"
+msgstr "取消"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__category_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Category"
+msgstr "类别"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__name
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_search
+msgid "Category Name"
+msgstr "类别名称"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__close_date
+msgid "Close Date"
+msgstr "关闭日期"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__color
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__color
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__color
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__color
+msgid "Color Index"
+msgstr "颜色索引"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__note
+msgid "Comments"
+msgstr "注释"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__company_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__company_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__company_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__company_id
+msgid "Company"
+msgstr "客户名称"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_maintenance_configuration
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Configuration"
+msgstr "配置"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__maintenance_type__corrective
+msgid "Corrective"
+msgstr "纠正"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__cost
+msgid "Cost"
+msgstr "成本"
+
+#. modules: hr_maintenance, maintenance
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_request_view_form_inherit_hr
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_request_view_search_inherit_hr
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "Created By"
+msgstr "创建人"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__create_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__create_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__create_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__create_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__create_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__create_uid
+msgid "Created by"
+msgstr "创建人"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__owner_user_id
+msgid "Created by User"
+msgstr "创建人"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__create_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__create_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__create_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__create_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__create_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__create_date
+msgid "Created on"
+msgstr "创建时间"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__maintenance_open_count
+msgid "Current Maintenance"
+msgstr "当前维护"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_bounced_content
+msgid "Custom Bounced Message"
+msgstr "自定义退回消息"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__c_axis
+msgid "C轴"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__effective_date
+msgid ""
+"Date at which the equipment became effective. This date will be used to "
+"compute the Mean Time Between Failure."
+msgstr "设备生效的日期。该日期将用于计算平均故障间隔时间。"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__next_action_date
+msgid "Date of the next preventive maintenance"
+msgstr "下次预防维护日期"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__request_date
+msgid "Date requested for the maintenance to happen"
+msgstr "要求进行维护的日期"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__schedule_date
+msgid ""
+"Date the maintenance team plans the maintenance. It should not differ much "
+"from the Request Date. "
+msgstr "维护团队计划维护的日期。 它应该与请求日期不同。"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__close_date
+msgid "Date the maintenance was finished. "
+msgstr "维护完成日期。"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__period
+msgid "Days between each preventive maintenance"
+msgstr "预防维护间隔天数"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_defaults
+msgid "Default Values"
+msgstr "默认值"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Delete"
+msgstr "删除"
+
+#. module: hr_maintenance
+#: model:ir.model.fields.selection,name:hr_maintenance.selection__maintenance_equipment__equipment_assign_to__department
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_form_inherit_hr
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_search_inherit_hr
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_tree_inherit_hr
+msgid "Department"
+msgstr "部门"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__description
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Description"
+msgstr "说明"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__display_name
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__display_name
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__display_name
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__display_name
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__display_name
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__display_name
+msgid "Display Name"
+msgstr "显示名称"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Done"
+msgstr "完成"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Dropdown menu"
+msgstr "下拉菜单"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__duration
+msgid "Duration"
+msgstr "时长"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__duration
+msgid "Duration in hours."
+msgstr "持续时长。"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Edit..."
+msgstr "编辑..."
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__effective_date
+msgid "Effective Date"
+msgstr "实际日期"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+msgid "Email Alias"
+msgstr "电子邮箱别名"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_id
+msgid ""
+"Email alias for this equipment category. New emails will automatically "
+"create a new equipment under this category."
+msgstr "此设备类别的电子邮件别名。新邮件将自动在此类别下创建新设备。"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__email_cc
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Email cc"
+msgstr "邮件抄送"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_maintenance_request__employee_id
+#: model:ir.model.fields.selection,name:hr_maintenance.selection__maintenance_equipment__equipment_assign_to__employee
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_form_inherit_hr
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_search_inherit_hr
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_tree_inherit_hr
+msgid "Employee"
+msgstr "员工"
+
+#. modules: hr_maintenance, maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_hr_employee__equipment_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__equipment_count
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__equipment_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__equipment_ids
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Equipment"
+msgstr "设备"
+
+#. module: maintenance
+#: model:mail.message.subtype,description:maintenance.mt_mat_assign
+#: model:mail.message.subtype,name:maintenance.mt_cat_mat_assign
+#: model:mail.message.subtype,name:maintenance.mt_mat_assign
+msgid "Equipment Assigned"
+msgstr "分配的设备"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_category_action
+#: model:ir.ui.menu,name:maintenance.menu_maintenance_cat
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+msgid "Equipment Categories"
+msgstr "设备类别"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__category_id
+msgid "Equipment Category"
+msgstr "设备类别"
+
+#. module: maintenance
+#: model:res.groups,name:maintenance.group_equipment_manager
+msgid "Equipment Manager"
+msgstr "设备管理员"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__equipment_type
+msgid "Equipment Type"
+msgstr ""
+
+#. modules: hr_maintenance, maintenance
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_action
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_action_from_category_form
+#: model:ir.model.fields,field_description:hr_maintenance.field_hr_employee__equipment_count
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__equipment_ids
+#: model:ir.ui.menu,name:maintenance.menu_equipment_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Equipments"
+msgstr "设备"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__fold
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__fold
+msgid "Folded in Maintenance Pipe"
+msgstr "在保养管道中折叠"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_cal
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_from_equipment
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_request_action_link
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_todo_request_action_from_dashboard
+#: model_terms:ir.actions.act_window,help:maintenance.maintenance_request_action_reports
+msgid ""
+"Follow the process of the request and communicate with the collaborator."
+msgstr "跟进请求的处理,并且和合作者沟通。"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_follower_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_follower_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_follower_ids
+msgid "Followers"
+msgstr "关注者"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_partner_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_partner_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "关注者(业务伙伴)"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__activity_type_icon
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr "完美的图标,例如FA任务"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Future Activities"
+msgstr "未来活动"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Group by..."
+msgstr "分组…"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__has_message
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__has_message
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__has_message
+msgid "Has Message"
+msgstr "有信息"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__priority__3
+msgid "High"
+msgstr "高"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "High-priority"
+msgstr "高优先级"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__id
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__id
+msgid "ID"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_parent_thread_id
+msgid ""
+"ID of the parent record holding the alias (example: project holding the task"
+" creation alias)"
+msgstr "上级记录ID支持别名(例如:项目支持任务创建别名)"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_exception_icon
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_exception_icon
+msgid "Icon"
+msgstr "图标"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__activity_exception_icon
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr "表示异常活动的图标。"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__message_needaction
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__message_needaction
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__message_needaction
+msgid "If checked, new messages require your attention."
+msgstr "确认后, 出现提示消息."
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__message_has_error
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__message_has_error
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__message_has_error
+msgid "If checked, some messages have a delivery error."
+msgstr "如果勾选此项, 某些消息将会产生传递错误。"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_bounced_content
+msgid ""
+"If set, this content will automatically be sent out to unauthorized users "
+"instead of the default message."
+msgstr "如果设置,此内容将自动发送给未经授权的用户,而不是默认消息。"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__image_id
+msgid "Image"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__kanban_state__normal
+#: model:maintenance.stage,name:maintenance.stage_1
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "In Progress"
+msgstr "进行中"
+
+#. module: maintenance
+#: model:maintenance.team,name:maintenance.equipment_team_maintenance
+msgid "Internal Maintenance"
+msgstr "内部维护"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Internal Notes"
+msgstr "内部说明"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_is_follower
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_is_follower
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_is_follower
+msgid "Is Follower"
+msgstr "关注者"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__kanban_state
+msgid "Kanban State"
+msgstr "看板状态"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment____last_update
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category____last_update
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request____last_update
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage____last_update
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs____last_update
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num____last_update
+msgid "Last Modified on"
+msgstr "最后修改时间"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__write_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__write_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__write_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__write_uid
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__write_uid
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__write_uid
+msgid "Last Updated by"
+msgstr "最后更新人"
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__write_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__write_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__write_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__write_date
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__write_date
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__write_date
+msgid "Last Updated on"
+msgstr "最后更新时间"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Late Activities"
+msgstr "最近的活动"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__location
+msgid "Location"
+msgstr "位置"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_m_reports_losses
+msgid "Losses Analysis"
+msgstr "损失分析"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__priority__1
+msgid "Low"
+msgstr "低"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_main_attachment_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_main_attachment_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "主要附件"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__maintenance_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__maintenance_ids
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Maintenance"
+msgstr "设备"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_m_request_calendar
+msgid "Maintenance Calendar"
+msgstr "保养日历"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__maintenance_count
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__maintenance_count
+msgid "Maintenance Count"
+msgstr "维修统计"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__maintenance_duration
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Maintenance Duration"
+msgstr "保养时长"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__maintenance_duration
+msgid "Maintenance Duration in hours."
+msgstr "数小时的维护持续时间。"
+
+#. module: maintenance
+#: model:mail.activity.type,name:maintenance.mail_act_maintenance_request
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Maintenance Request"
+msgstr "保养请求"
+
+#. module: maintenance
+#: model:mail.message.subtype,name:maintenance.mt_cat_req_created
+msgid "Maintenance Request Created"
+msgstr "已创建维护请求"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "Maintenance Request Search"
+msgstr "维护请求搜索"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_stage_view_tree
+msgid "Maintenance Request Stage"
+msgstr "保养请求需求阶段"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_stage_view_search
+msgid "Maintenance Request Stages"
+msgstr "保养请求需求阶段"
+
+#. module: maintenance
+#: model:mail.message.subtype,description:maintenance.mt_req_created
+msgid "Maintenance Request created"
+msgstr "已创建维护请求"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_request_action
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_request_action_cal
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_request_action_from_equipment
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_request_action_link
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_todo_request_action_from_dashboard
+#: model:ir.actions.act_window,name:maintenance.maintenance_request_action_reports
+#: model:ir.ui.menu,name:maintenance.maintenance_request_reporting
+#: model:ir.ui.menu,name:maintenance.menu_m_request_form
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Maintenance Requests"
+msgstr "保养请求"
+
+#. module: maintenance
+#: model:ir.model,name:maintenance.model_maintenance_stage
+msgid "Maintenance Stage"
+msgstr "保养阶段"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_maintenance_stage_configuration
+msgid "Maintenance Stages"
+msgstr "保养阶段"
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.action_view_maintenance_standards_tree
+msgid "Maintenance Standards"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__maintenance_team_id
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_tree
+msgid "Maintenance Team"
+msgstr "保养团队"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.maintenance_dashboard_action
+#: model:ir.model,name:maintenance.model_maintenance_team
+#: model:ir.ui.menu,name:maintenance.menu_maintenance_teams
+msgid "Maintenance Teams"
+msgstr "保养团队"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__maintenance_type
+msgid "Maintenance Type"
+msgstr "保养类型"
+
+#. module: maintenance
+#: model:ir.actions.server,name:maintenance.maintenance_requests_cron_ir_actions_server
+#: model:ir.cron,cron_name:maintenance.maintenance_requests_cron
+msgid "Maintenance: generate preventive maintenance requests"
+msgstr "维护:生成预防性维护请求"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_res_users__equipment_ids
+msgid "Managed Equipments"
+msgstr "管理设备"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_has_error
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_has_error
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_has_error
+msgid "Message Delivery error"
+msgstr "消息传递错误"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_ids
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_ids
+msgid "Messages"
+msgstr "消息"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__model
+msgid "Model"
+msgstr "模型"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__my_activity_date_deadline
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr "我的活动截止时间"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "My Equipments"
+msgstr "我的设备"
+
+#. modules: hr_maintenance, maintenance
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_request_view_search_inherit_hr
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "My Maintenances"
+msgstr "我的维护"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__name
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_tree
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Name"
+msgstr "名称"
+
+#. module: maintenance
+#: model:maintenance.stage,name:maintenance.stage_0
+msgid "New Request"
+msgstr "新的请求"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_date_deadline
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "下一活动截止日期"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_summary
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_summary
+msgid "Next Activity Summary"
+msgstr "下一活动摘要"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_type_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_type_id
+msgid "Next Activity Type"
+msgstr "下一活动类型"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Next Preventive Maintenance"
+msgstr "下次预防保养"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__priority__2
+msgid "Normal"
+msgstr "正常"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__note
+msgid "Note"
+msgstr "笔记"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_needaction_counter
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_needaction_counter
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_needaction_counter
+msgid "Number of Actions"
+msgstr "动作数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_count
+msgid "Number of Requests"
+msgstr "请求数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_count_block
+msgid "Number of Requests Blocked"
+msgstr "已阻止请求的数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_count_date
+msgid "Number of Requests Scheduled"
+msgstr "已计划请求的数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_count_unscheduled
+msgid "Number of Requests Unscheduled"
+msgstr "未计划请求的数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_count_high_priority
+msgid "Number of Requests in High Priority"
+msgstr "高优先级的请求数量"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__message_has_error_counter
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__message_has_error_counter
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__message_has_error_counter
+msgid "Number of errors"
+msgstr "错误数"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__message_needaction_counter
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__message_needaction_counter
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "需要作业消息数量"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__message_has_error_counter
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__message_has_error_counter
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "发送错误的消息数量"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_force_thread_id
+msgid ""
+"Optional ID of a thread (record) to which all incoming messages will be "
+"attached, even if they did not reply to it. If set, this will disable the "
+"creation of new records completely."
+msgstr "无论是否回复,所有的接收的邮件都将附上一条线索(记录)选配的ID。如果设置了,这个将完全阻止新记录的创建。"
+
+#. module: hr_maintenance
+#: model:ir.model.fields.selection,name:hr_maintenance.selection__maintenance_equipment__equipment_assign_to__other
+msgid "Other"
+msgstr "其他"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_m_reports_oee
+msgid "Overall Equipment Effectiveness (OEE)"
+msgstr "整体设备效率OEE"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__owner_user_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_user_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_tree
+msgid "Owner"
+msgstr "所有者"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_parent_model_id
+msgid "Parent Model"
+msgstr "上级模型"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_parent_thread_id
+msgid "Parent Record Thread ID"
+msgstr "上级记录ID"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_parent_model_id
+msgid ""
+"Parent model holding the alias. The model holding the alias reference is not"
+" necessarily the model given by alias_model_id (example: project "
+"(parent_model) and task (model))"
+msgstr ""
+"父级模型拥有别名。拥有别名参考的模型不一定是alias_model_id给出的模型 (例如:project(parent_model) 和任务 "
+"(模型))"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_contact
+msgid ""
+"Policy to post a message on the document using the mailgateway.\n"
+"- everyone: everyone can post\n"
+"- partners: only authenticated partners\n"
+"- followers: only followers of the related document or members of following channels\n"
+msgstr ""
+"政策是通过邮件网关在单据上提交一个消息\n"
+"- everyone: 任何人都可以提交\n"
+"- partners: 只有认证过的合作伙伴\n"
+"- followers: 只有相关单据或下列频道成员的跟随者\n"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__maintenance_type__preventive
+msgid "Preventive"
+msgstr "预防措施"
+
+#. modules: sf_maintenance, maintenance
+#. odoo-python
+#: code:addons/maintenance/models/maintenance.py:0
+#: code:addons/sf_maintenance/models/sf_maintenance.py:0
+#: code:addons/sf_maintenance/models/sf_maintenance.py:0
+#, python-format
+msgid "Preventive Maintenance - %s"
+msgstr "预防保养 - %s"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Preventive Maintenance Frequency"
+msgstr "预防保养频次"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__priority
+msgid "Priority"
+msgstr "优先级"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Product Information"
+msgstr "产品信息"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "Ready"
+msgstr "就绪"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__kanban_state__done
+msgid "Ready for next stage"
+msgstr "下一阶段就绪"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Record Colour"
+msgstr "记录颜色"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__alias_force_thread_id
+msgid "Record Thread ID"
+msgstr "记录线索ID"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Reopen Request"
+msgstr "重开请求"
+
+#. module: maintenance
+#: model:maintenance.stage,name:maintenance.stage_3
+msgid "Repaired"
+msgstr "已维修"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.maintenance_reporting
+#: model:ir.ui.menu,name:maintenance.menu_m_reports
+msgid "Reporting"
+msgstr "报表"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__request_ids
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_kanban
+msgid "Request"
+msgstr "请求"
+
+#. module: maintenance
+#: model:mail.message.subtype,name:maintenance.mt_req_created
+msgid "Request Created"
+msgstr "已创建请求"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__request_date
+msgid "Request Date"
+msgstr "请求日期"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__done
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__done
+msgid "Request Done"
+msgstr "请求完成"
+
+#. module: maintenance
+#. odoo-python
+#: code:addons/maintenance/models/maintenance.py:0
+#, python-format
+msgid "Request planned for %s"
+msgstr "需求计划 %s"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Requested By"
+msgstr "请求人"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_kanban
+msgid "Requested by :"
+msgstr "由谁请求:"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__todo_request_ids
+msgid "Requests"
+msgstr "请求"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment_category__technician_user_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "Responsible"
+msgstr "负责人"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__activity_user_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__activity_user_id
+msgid "Responsible User"
+msgstr "负责用户"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Scheduled"
+msgstr "安排"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__schedule_date
+msgid "Scheduled Date"
+msgstr "安排的日期"
+
+#. module: maintenance
+#: model:maintenance.stage,name:maintenance.stage_4
+msgid "Scrap"
+msgstr "报废"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__scrap_date
+msgid "Scrap Date"
+msgstr "报废日期"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_search
+msgid "Search"
+msgstr "搜索"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_stage__sequence
+msgid "Sequence"
+msgstr "序号"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__serial_no
+msgid "Serial Number"
+msgstr "序列号"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__archive
+msgid ""
+"Set archive to true to hide the maintenance request without deleting it."
+msgstr "将归档设置为真以隐藏维护请求,而不是删除它。"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Show all records which has next action date is before today"
+msgstr "显示所有的在今天之前的下一个行动日期的记录"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__stage_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+msgid "Stage"
+msgstr "阶段"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.hr_equipment_stage_action
+msgid "Stages"
+msgstr "阶段"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__standard_id
+msgid "Standard"
+msgstr ""
+
+#. module: maintenance
+#: model:mail.message.subtype,name:maintenance.mt_req_status
+msgid "Status Changed"
+msgstr "状态已经更改"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__activity_state
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"基于活动的状态 \n"
+" 逾期:已经超过截止日期 \n"
+" 现今:活动日期是当天 \n"
+" 计划:未来活动。"
+
+#. module: maintenance
+#: model:mail.message.subtype,description:maintenance.mt_req_status
+msgid "Status changed"
+msgstr "状态已变更"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__name
+msgid "Subjects"
+msgstr "主题"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__T_tool_time
+msgid "T-T换刀时间(s)"
+msgstr ""
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__maintenance_team_id
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_search
+msgid "Team"
+msgstr "团队"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__member_ids
+msgid "Team Members"
+msgstr "团队成员"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_team__name
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_form
+msgid "Team Name"
+msgstr "团队名称"
+
+#. module: maintenance
+#: model:ir.actions.act_window,name:maintenance.maintenance_team_action_settings
+msgid "Teams"
+msgstr "团队"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__technician_user_id
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__user_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Technician"
+msgstr "技术员"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_model_id
+msgid ""
+"The model (Odoo Document Kind) to which this alias corresponds. Any incoming"
+" email that does not reply to an existing record will cause the creation of "
+"a new record of this model (e.g. a Project Task)"
+msgstr ""
+"相应于这个别名对应的模型(Odoo单据种类)。任何一封不属于对某个已存在的记录的到来邮件,将导致此模块中新记录的创建(例如,一个新的项目任务)。"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_name
+msgid ""
+"The name of the email alias, e.g. 'jobs' if you want to catch emails for "
+""
+msgstr "邮件别名的名称,例如,如果您要收取 的EMail,别名就要设为:\"jobs\""
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment_category__alias_user_id
+msgid ""
+"The owner of records created upon receiving emails on this alias. If this "
+"field is not set the system will attempt to find the right owner based on "
+"the sender (From) address, or will use the Administrator account if no "
+"system user is found for that address."
+msgstr ""
+"基于此别名接收到的邮件,创建记录的所有人。若此字段没有设置,系统将试图根据发送者(From)地址来查找正确的所有者,如果对于那个地址没有系统用户被发现,将使用系统管理员账户。"
+
+#. module: maintenance
+#: model:res.groups,comment:maintenance.group_equipment_manager
+msgid "The user will be able to manage equipments."
+msgstr "用户将能够管理设备。"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "To Do"
+msgstr "待办"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Today Activities"
+msgstr "今天的活动"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Top Priorities"
+msgstr "顶级优先级"
+
+#. module: maintenance
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_action
+#: model_terms:ir.actions.act_window,help:maintenance.hr_equipment_action_from_category_form
+msgid ""
+"Track equipments and link it to an employee or department.\n"
+" You will be able to manage allocations, issues and maintenance of your equipment."
+msgstr ""
+"跟踪设备并将其链接到员工或部门\n"
+" 您将能够管理设备的分配,问题和维护。"
+
+#. module: maintenance
+#: model:ir.model.fields,help:maintenance.field_maintenance_equipment__activity_exception_decoration
+#: model:ir.model.fields,help:maintenance.field_maintenance_request__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr "记录的异常活动类型。"
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "T型槽尺寸:"
+msgstr ""
+
+#. modules: hr_maintenance, maintenance
+#: model_terms:ir.ui.view,arch_db:hr_maintenance.maintenance_equipment_view_kanban_inherit_hr
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Unassigned"
+msgstr "未分派"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Under Maintenance"
+msgstr "处于保养中"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Unread Messages"
+msgstr "未读消息"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_search
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_kanban
+msgid "Unscheduled"
+msgstr "未安排"
+
+#. module: hr_maintenance
+#: model:ir.model.fields,field_description:hr_maintenance.field_maintenance_equipment__equipment_assign_to
+msgid "Used By"
+msgstr "用于"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "Used in location"
+msgstr "使用地点"
+
+#. module: hr_maintenance
+#: model:ir.model,name:hr_maintenance.model_res_users
+msgid "User"
+msgstr "用户"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__partner_id
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_search
+msgid "Vendor"
+msgstr "供应商"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__partner_ref
+msgid "Vendor Reference"
+msgstr "供应商参考"
+
+#. module: maintenance
+#: model:ir.model.fields.selection,name:maintenance.selection__maintenance_request__priority__0
+msgid "Very Low"
+msgstr "非常低"
+
+#. module: maintenance
+#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__warranty_date
+msgid "Warranty Expiration Date"
+msgstr "质量保证到期日期"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__x_axis
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "X轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__X_precision
+msgid "X轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__precision_max
+msgid "X轴定位精度max(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__precision_min
+msgid "X轴定位精度min(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__X_axis_rapid_traverse_speed
+msgid "X轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__X_precision_repeat
+msgid "X轴重复定位精度(mm)"
+msgstr ""
+
+#. module: maintenance
+#. odoo-python
+#: code:addons/maintenance/models/maintenance.py:0
+#, python-format
+msgid ""
+"You cannot delete an equipment category containing equipments or maintenance"
+" requests."
+msgstr "对于已经有相关设备或者修理请求的设备种类不能被删除"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__y_axis
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "Y轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Y_precision
+msgid "Y轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Y_axis_rapid_traverse_speed
+msgid "Y轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Y_precision_repeat
+msgid "Y轴重复定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__z_axis
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "Z轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Z_precision
+msgid "Z轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_balance_mode_for_Z
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "Z轴平衡方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Z_axis_rapid_traverse_speed
+msgid "Z轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__Z_precision_repeat
+msgid "Z轴重复定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__a_axis
+msgid "a轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__a_precision
+msgid "a轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__a_axis_rapid_traverse_speed
+msgid "a轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__a_precision_repeat
+msgid "a轴重复定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__b_precision
+msgid "b轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__b_axis_rapid_traverse_speed
+msgid "b轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__b_precision_repeat
+msgid "b轴重复定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__c_precision
+msgid "c轴定位精度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__c_axis_rapid_traverse_speed
+msgid "c轴快速进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__c_precision_repeat
+msgid "c轴重复定位精度(mm)"
+msgstr ""
+
+#. modules: sf_maintenance, maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "days"
+msgstr "天数"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.maintenance_team_view_form
+msgid "e.g. Internal Maintenance"
+msgstr "例如,内部维护"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+msgid "e.g. LED Monitor"
+msgstr "例如:LED显示器"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_category_view_form
+msgid "e.g. Monitors"
+msgstr "例如:显示器"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_form
+msgid "e.g. Screen not working"
+msgstr "例如:屏幕不工作"
+
+#. modules: sf_maintenance, maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_view_form
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "hours"
+msgstr "小时"
+
+#. module: maintenance
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_graph
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_pivot
+#: model_terms:ir.ui.view,arch_db:maintenance.hr_equipment_request_view_tree
+msgid "maintenance Request"
+msgstr "保养请求"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_maintenance_title
+msgid "maintenance.menu_maintenance_title"
+msgstr "设备"
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_standard_image
+msgid "maintenance.standard.image"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_level__一级
+msgid "一级(严重)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_level__三级
+msgid "三级(轻微)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__number_of_axles__三轴
+msgid "三轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_standards_form
+msgid "上传图片"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__overhaul_date
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "下次预防检修"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__lead_screw
+msgid "丝杆"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "主轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__spindle_center_distance
+msgid "主轴中心至立柱滑轨面距离(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__heightened_way
+msgid "主轴加高方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__spindle_peak_power
+msgid "主轴峰值功率(kw)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__spindle_peak_torque
+msgid "主轴峰值扭矩(n/m)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__spindle_continuous_power
+msgid "主轴持续功率(kw)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__spindle_sustained_torque
+msgid "主轴持续扭矩(n/m)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "主轴最高转速(r/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__torque
+msgid "主轴点击扭矩(n/m)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__motor_power
+msgid "主轴电机功率(kw)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "主轴端面-工作台距离(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__distance_max
+msgid "主轴端面至工作台面距离MAX(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__distance_min
+msgid "主轴端面至工作台面距离MIN(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__taper_type_id
+msgid "主轴锥孔型号"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__taper
+msgid "主轴锥度(°)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__state
+msgid "事件/状体"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__state
+msgid "事件/状态"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_level__二级
+msgid "二级(中等)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__number_of_axles__五轴
+msgid "五轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__run_code
+msgid "任务指令代码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__run_type
+msgid "任务类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__run_last
+msgid "任务终点"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__run_first
+msgid "任务起点"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__heightened_way__sifudianji
+msgid "伺服电机驱动"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__equipment_maintenance_standards__maintenance_type__保养
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__保养
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__保养
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_request__sf_maintenance_type__保养
+msgid "保养"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__eq_maintenance_ids
+msgid "保养设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_installation_method__倒挂式
+msgid "倒挂式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_parking_accuracy
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "停车精度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__permissible_inertial_torque
+msgid "允许惯性扭矩(kg-m²)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__permissible_load_torque
+msgid "允许负载扭矩(N-m)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_charge_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "充电方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__detect_measurement_mode__光栅尺
+msgid "光栅尺"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__number_of_axles__六轴
+msgid "六轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__关机
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__关机
+msgid "关机"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__offline_time
+msgid "关机时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__offline_time
+msgid "关机时长(小时)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__offline_nums
+msgid "关机次数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__equipment_type__其他
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_category__equipment_type__其他
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "其他"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "其他参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__image_lq_id
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "冷却方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__date_of_manufacture
+msgid "出厂日期"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "刀具"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_diameter_max
+msgid "刀具刀径max(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_diameter_min
+msgid "刀具刀径min(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_quality_max
+msgid "刀具最大质量(kg)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_long_max
+msgid "刀具最大长度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_full_diameter_max
+msgid "刀具满刀最大直径(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_speed
+msgid "刀具速度(m/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__tool_perimeter_diameter_max
+msgid "刀具邻空刀最大直径(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__number_of_knife_library
+msgid "刀库数量(把)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__knife_type
+msgid "刀把类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_resolution
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "分辨率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__created_user_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__created_user
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "创建人"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_tree
+msgid "创建时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__supplier_id
+msgid "制造商"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_move_motor_power
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "前移电机功率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_move_motor_speed_ratio
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "前移电机速比"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__function_type
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__function_type
+msgid "功能类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__加工
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__加工
+msgid "加工"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__production_name
+msgid "加工工单"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__work_time
+msgid "加工时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__work_time
+msgid "加工时长(小时)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "加工能力"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "加工行程(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__axis_ids
+msgid "动作范围"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_Lifting_height
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "升降高度(max)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__history_logs_detail
+msgid "历史运行日志详情"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_pressurized_air
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "压缩空气"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__original_value
+msgid "原值"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__images
+msgid "反馈图片"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_zoom_objective_magnification
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "变焦物镜倍率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_gripping_of_workpieces_W
+msgid "可抓取工件(宽)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_gripping_of_workpieces_L
+msgid "可抓取工件(长)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_gripping_of_workpieces_H
+msgid "可抓取工件(高)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__work_rate
+msgid "可用率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__work_rate
+msgid "可用率(%)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__name
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__name
+msgid "名称"
+msgstr ""
+
+#. module: hr_maintenance
+#: model:ir.model,name:hr_maintenance.model_hr_employee
+msgid "员工信息"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__Period
+msgid "周期/频次(天)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__brand_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__brand
+msgid "品牌"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__type_id
+msgid "品牌型号"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__number_of_axles__四轴
+msgid "四轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__rotary_cutting_feed_rate
+msgid "回转切削进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_way__图文报警
+msgid "图文报警"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_picture
+msgid "图片"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__axis_driven_type
+msgid "坐标轴驱动类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__type_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__type_id
+msgid "型号"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "基础参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_installation_method__壁挂式
+msgid "壁挂式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_way__声光报警
+msgid "声光报警"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__operator
+msgid "处理人"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__remark
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__remark
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__note
+msgid "备注"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__function_type__fhjgzx
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__function_type__fhjgzx
+msgid "复合加工中心"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_security
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "安全防护"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_installation_method
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "安装方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__state
+msgid "实时状态"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__detect_measurement_mode__容栅
+msgid "容栅"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_navigation_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "导航方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__guide_rail
+msgid "导轨"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state__封存(报废)
+msgid "封存(报废)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_radius_of_the_boom
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "展臂半径"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__workpiece_load
+msgid "工件最大负载(kg)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__workorder
+msgid "工件编码/任务单号"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__workbench_W
+msgid "工作台宽度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "工作台尺寸(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__workbench_L
+msgid "工作台长度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__workbench_H
+msgid "工作台高度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_working_distance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "工作距离"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "已归档"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state_zc__已注册
+msgid "已注册"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__sequence
+msgid "序号"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__begin_time
+msgid "开始时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__online_time
+msgid "开机时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__online_time
+msgid "开机时长(小时)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__待机
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__待机
+msgid "待机"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__idle_time
+msgid "待机时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__idle_time
+msgid "待机时长(小时)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__idle_nums
+msgid "待机次数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__idle_rate
+msgid "待机率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__idle_rate
+msgid "待机率(%)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__factory_id
+msgid "所属工厂"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__AGV_charge_mode__手动
+msgid "手动"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "抓取工件最大尺寸"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__alarm_way
+msgid "报警方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__alarm_level
+msgid "报警级别"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_control_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "控制方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__control_system_id
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "控制系统"
+msgstr "数控系统"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_hoist_motor_power
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "提升电机功率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_magnification
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "放大倍率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__故障
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__故障
+msgid "故障"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__fault_code
+msgid "故障代码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state__故障停机
+msgid "故障停机"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__fault_process
+msgid "故障处理方法"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__fault_alarm_info
+msgid "故障报警信息"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__alarm_time
+msgid "故障报警时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__fault_time
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__fault_duration
+msgid "故障时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__fault_time
+msgid "故障时长(小时)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__fault_nums
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__fault_nums
+msgid "故障次数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__recovery_time
+msgid "故障消除时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__fault_rate
+msgid "故障率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__fault_rate
+msgid "故障率(%)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__fault_type
+msgid "故障类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__alarm_way__文本提示报警
+msgid "文本提示报警"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "日常机床保养"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__log_id
+msgid "日志"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__detail_ids
+msgid "日志详情"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__time
+msgid "日期/事件"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__day_logs_detail
+msgid "日运行日志详情"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__time
+msgid "时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__is_binding
+msgid "是否绑定机床"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最大"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最大(max)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_gradeability_max
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最大爬坡度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__angle_max
+msgid "最大角度+(°)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__weight
+msgid "最大负载(kg)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最大负载重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最大速度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__velocity
+msgid "最大速度(°/s)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最小"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最小(min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_ground_clearance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最小离地高度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__angle_min
+msgid "最小角度-(°)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_turning_radius
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最小转弯半径"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "最小速度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__active
+msgid "有效"
+msgstr "启用"
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state_zc__未注册
+msgid "未注册"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "本体总重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__name
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__equipment_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__equipment_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__maintenance_equipment_id
+msgid "机台号"
+msgstr "设备名称"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__MTcode
+msgid "机台编码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_robot_axis_num__equipment_id
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__equipment_type__机器人
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_category__equipment_type__机器人
+msgid "机器人"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_operating_temperature
+msgid "机器人环境温度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_operating_humidity
+msgid "机器人环境湿度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_sf_robot_axis_num
+msgid "机器人轴参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_id
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__equipment_type__机床
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_category__equipment_type__机床
+msgid "机床"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_W
+msgid "机床宽度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "机床尺寸(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "机床注册"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__state
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__state
+msgid "机床状态"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_category
+msgid "机床类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__run_time
+msgid "机床累计运行时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_L
+msgid "机床长度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__machine_tool_H
+msgid "机床高度(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_standards__fault_type__机械类
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__fault_type__机械类
+msgid "机械类"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_load_weight_max
+msgid "机械臂最大负载重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_weight
+msgid "机械臂本体总重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_axis_num
+msgid "机械臂轴数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_oee_form
+msgid "查看24H日志"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_velocity
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "标准速度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_velocity_max
+msgid "标准速度(最大)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_velocity_min
+msgid "标准速度(最小)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_request_view_form
+msgid "标记已完成"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__equipment_maintenance_standards__maintenance_type__检修
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_log_detail__state__检修
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__state__检修
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_request__sf_maintenance_type__检修
+msgid "检修"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__overhaul_duration
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "检修时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__overhaul_ids
+msgid "检修设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_x_axis
+msgid "检测X轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_y_axis
+msgid "检测Y轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_z_axis
+msgid "检测Z轴"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__equipment_type__检测设备
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_category__equipment_type__检测设备
+msgid "检测设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_load_weight_max
+msgid "检测设备最大负载重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_weight
+msgid "检测设备本体总重量"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_operating_temperature
+msgid "检测设备环境温度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_operating_humidity
+msgid "检测设备环境湿度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__T_trough_wide
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "槽宽(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__T_trough_num
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "槽数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__T_trough_distance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "槽距(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state__正常
+msgid "正常"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__incomplete_value
+msgid "残值"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__heightened_way__youyagang
+msgid "油压缸驱动"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__registration_date
+msgid "注册日期"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__state_zc
+msgid "注册状态"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_measurement_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "测量方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_precision
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "测量精度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "测量范围(max)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_measurement_length
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "深孔测量长度(max)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.actions.act_window,help:sf_maintenance.hr_equipment_action1
+msgid "添加一个设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.actions.act_window,help:sf_maintenance.hr_equipment_request_action1
+msgid "添加维保计划"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__detect_measurement_mode__激光干涉仪
+msgid "激光干涉仪"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.actions.act_window,help:sf_maintenance.action_equipment_maintenance_standards
+msgid "点击下方的创建按钮来添加设备维保标准。"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_object_field_of_view_max
+msgid "物方视场(最大)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_object_field_of_view_min
+msgid "物方视场(最小)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "物方视场:"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_operating_temperature
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "环境温度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_operating_humidity
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "环境湿度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "电机参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_standards__fault_type__电气类
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__fault_type__电气类
+msgid "电气类"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_power_requirements
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "电源要求"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__production_line
+msgid "目的生产线"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__straight_cutting_feed_rate
+msgid "直线切削进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__linear_axis_guides_type
+msgid "直线轴导轨类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_request_view_form
+msgid "确认维保计划"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__detect_measurement_mode__磁栅
+msgid "磁栅"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_transfer_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "移载方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_standards__fault_type__程序类
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__fault_type__程序类
+msgid "程序类"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state__空闲
+msgid "空闲"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_category__equipment_type_code
+msgid "简写"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__fault_type
+msgid "类别"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__maintenance_type
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_category__equipment_type
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__type
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "类型"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__type__type1
+msgid "类型1"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__type__type2
+msgid "类型2"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "精度参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_standards__fault_type__系统类
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__sf_maintenance_logs__fault_type__系统类
+msgid "系统类"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__end_time
+msgid "结束时间"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "维保"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_request_view_form
+msgid "维保人"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standard_image__image
+msgid "维保图片"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:res.groups,name:sf_maintenance.sf_group_equipment_user
+msgid "维保岗"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_request_view_form
+msgid "维保日期"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__maintenance_standards
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_request_view_form
+msgid "维保标准"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_request__sf_maintenance_type
+msgid "维保类别"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.hr_equipment_request_action1
+#: model:ir.model,name:sf_maintenance.model_maintenance_request
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__maintenance_request_ids
+#: model:ir.ui.menu,name:sf_maintenance.menu_m_request_form1
+msgid "维保计划"
+msgstr "保养请求"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__remark
+msgid "维保记录"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_standards
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__maintenance_standards_ids
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_request__maintenance_standards
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__name
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_form
+msgid "维保项目"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__code
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__code
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "编码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__code_location
+msgid "编码位置"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__robot_installation_method__置地式
+msgid "置地式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.action_maintenance_equipment_image
+#: model:ir.ui.menu,name:sf_maintenance.maintenance_equipment_image_form
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_equipment_image_tree
+msgid "能力特征库"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__AGV_charge_mode__自动
+msgid "自动"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__code
+msgid "行业编码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_direction_travel
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "行走方向"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__state__计划维保
+msgid "计划维保"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_agv_log__equipment_id
+msgid "设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.action_maintenance_oee
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment_oee
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__equipment_oee_ids
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__equipment_oee_id
+#: model:ir.ui.menu,name:sf_maintenance.menu_maintenance_oee
+#: model_terms:ir.actions.act_window,help:sf_maintenance.action_maintenance_oee
+msgid "设备OEE"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__name
+#: model:ir.model.fields,field_description:sf_maintenance.field_sf_maintenance_logs__maintenance_equipment_oee_id
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "设备oee"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__eq_maintenance_id
+msgid "设备保养标准"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "设备参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__name
+msgid "设备名称"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__machine_tool_picture
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__machine_tool_picture
+msgid "设备图片"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "设备尺寸(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_W
+msgid "设备尺寸(宽)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_L
+msgid "设备尺寸(长)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_H
+msgid "设备尺寸(高)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:res.groups,name:sf_maintenance.sf_group_equipment_manager
+msgid "设备总监"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.action_maintenance_logs
+#: model:ir.model,name:sf_maintenance.model_sf_maintenance_logs
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__sf_maintenance_logs_ids
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__sf_maintenance_logs_ids
+#: model:ir.ui.menu,name:sf_maintenance.menu_maintenance_logs
+#: model_terms:ir.actions.act_window,help:sf_maintenance.action_maintenance_logs
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_logs_form
+msgid "设备故障日志"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment
+msgid "设备机床刀库"
+msgstr "设备保养"
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__overhaul_id
+msgid "设备检修标准"
+msgstr ""
+
+#. modules: sf_maintenance, maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.hr_equipment_action1
+#: model:ir.ui.menu,name:maintenance.menu_m_dashboard
+#: model:ir.ui.menu,name:sf_maintenance.menu_equipment_form1
+msgid "设备清单"
+msgstr "驾驶舱"
+
+#. module: maintenance
+#: model:ir.ui.menu,name:maintenance.menu_m_request
+msgid "设备管理"
+msgstr "维保"
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment_category
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__maintenance_equipment_category_id
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_search
+msgid "设备类别"
+msgstr "维护设备类别"
+
+#. module: sf_maintenance
+#: model:ir.actions.act_window,name:sf_maintenance.action_equipment_maintenance_standards
+#: model:ir.model,name:sf_maintenance.model_equipment_maintenance_standards
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__equipment_maintenance_standards_ids
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_request__equipment_maintenance_id
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_standards__equipment_maintenance_standards_id
+#: model:ir.ui.menu,name:sf_maintenance.menu_equipment_maintenance_standards
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_form
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_equipment_maintenance_standards_tree
+msgid "设备维保标准"
+msgstr ""
+
+#. module: sf_maintenance
+#. odoo-python
+#: code:addons/sf_maintenance/models/sf_maintenance_requests.py:0
+#, python-format
+msgid "设备维保标准不能为空,请选择后再保存"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.view_maintenance_standards_form
+msgid "设备维保项目"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee__equipment_code
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_log_detail__equipment_code
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment_oee_logs__equipment_code
+msgid "设备编码"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment_oee_logs
+msgid "设备运行日志"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model,name:sf_maintenance.model_maintenance_equipment_oee_log_detail
+msgid "设备运行日志详情"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__date_of_warranty
+msgid "质保截至日期"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.actions.act_window,help:sf_maintenance.hr_equipment_action1
+msgid ""
+"跟踪设备并将其链接到员工或部门。\n"
+" 您将能够管理设备的分配、问题和维护。"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.actions.act_window,help:sf_maintenance.hr_equipment_request_action1
+msgid "跟进请求的处理,并且和合作者沟通。"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__function_type__cxjgzx
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__function_type__cxjgzx
+msgid "车削加工中心"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "轨道尺寸"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_track_dimensions_W
+msgid "轨道尺寸(宽)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_track_dimensions_L
+msgid "轨道尺寸(长)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_track_dimensions_H
+msgid "轨道尺寸(高)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_veer_motor_power
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "转向电机功率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_veer_motor_speed_ratio
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "转向电机速比"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__rotate_speed
+msgid "转速"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__number_of_axles
+msgid "轴数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_goods_W
+msgid "载货尺寸(宽)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_goods_L
+msgid "载货尺寸(长)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_goods_H
+msgid "载货尺寸(高)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "载货尺寸MAX(mm)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "进给参数"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__feed_speed
+msgid "进给速度(mm/min)"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_job_duration
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "连续作业时长"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_equipment_maintenance_standards__maintenance_equipment_ids
+msgid "适用设备"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_communication_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "通讯方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__date_of_purchase
+msgid "采购日期"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_repeatable_positioning_accuracy
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "重复定位精度"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__function_type__zxjgzx
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment_oee_logs__function_type__zxjgzx
+msgid "钻铣加工中心"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__detect_locking_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "锁紧方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__overhaul_period
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "预防检修频次"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__robot_drive_mode
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "驱动方式"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_drive_motor_power
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "驱动电机功率"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields,field_description:sf_maintenance.field_maintenance_equipment__AGV_drive_motor_speed_ratio
+#: model_terms:ir.ui.view,arch_db:sf_maintenance.sf_hr_equipment_view_form
+msgid "驱动电机速比"
+msgstr ""
+
+#. module: sf_maintenance
+#: model:ir.model.fields.selection,name:sf_maintenance.selection__maintenance_equipment__heightened_way__chilunjia
+msgid "齿轮架驱动"
+msgstr ""
diff --git a/sf_maintenance/models/sf_maintenance_oee.py b/sf_maintenance/models/sf_maintenance_oee.py
index a88bc27e..0889fdb5 100644
--- a/sf_maintenance/models/sf_maintenance_oee.py
+++ b/sf_maintenance/models/sf_maintenance_oee.py
@@ -88,6 +88,69 @@ class SfMaintenanceEquipmentOEE(models.Model):
begin_time = fields.Date('开始时间')
end_time = fields.Date('结束时间')
+ def get_running_datas(self):
+ base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ url_time = base_url + '/api/RunningTimeDetail'
+ cnc_list_obj = self.env['maintenance.equipment'].sudo().search(
+ [('function_type', '!=', False), ('active', '=', True)])
+ machine_list = list(map(lambda x: x.code, cnc_list_obj))
+ # print('machine_list: %s' % machine_list)
+
+ data_time = {
+ "machine_list": str(machine_list)
+ }
+ # 发送POST请求
+ response_time = requests.post(url_time, json={}, data=data_time)
+ # print(response_time.json())
+ if response_time.status_code == 200:
+ result_time = response_time.json()
+ if result_time['status'] == 1:
+ real_dict = result_time['data']
+ for key in real_dict:
+ # print(key)
+ equipment_obj = self.env['maintenance.equipment.oee'].sudo().search([('equipment_code', '=', key)])
+ if real_dict[key]['power_on_time'] == 0:
+ equipment_obj.online_time = 0
+ equipment_obj.idle_time = 0
+ equipment_obj.idle_rate = 0
+ equipment_obj.work_rate = 0
+ equipment_obj.fault_time = 0
+ equipment_obj.fault_rate = 0
+ equipment_obj.fault_nums = 0
+ equipment_obj.idle_nums = 0
+ equipment_obj.work_time = 0
+ else:
+ equipment_obj.online_time = round(convert_to_seconds(real_dict[key]['power_on_time']) / 3600, 2)
+ equipment_obj.work_time = round(convert_to_seconds(real_dict[key]['cut_time']) / 3600, 2)
+ equipment_obj.fault_nums = real_dict[key]['alarm_all_nums']
+ equipment_obj.idle_nums = real_dict[key]['idle_count']
+ equipment_obj.fault_time = round((float(real_dict[key]['alarm_all_time']) if real_dict[key][
+ 'alarm_all_time'] else 0) / 3600, 2)
+ equipment_obj.idle_time = float(equipment_obj.online_time) - float(
+ equipment_obj.work_time) if equipment_obj.online_time and equipment_obj.work_time else 0
+ equipment_obj.idle_rate = round(
+ float(equipment_obj.idle_time) / (
+ float(equipment_obj.online_time) if equipment_obj.online_time else 1) * 100, 2)
+ equipment_obj.work_rate = round(
+ float(equipment_obj.work_time) / (
+ float(equipment_obj.online_time) if equipment_obj.online_time else 1) * 100, 2)
+
+ equipment_obj.fault_rate = round(
+ float(equipment_obj.fault_time) / (
+ float(equipment_obj.online_time) if equipment_obj.online_time else 1) * 100, 2)
+
+ # 获取当前时间的时间戳
+ current_timestamp = datetime.datetime.now().timestamp()
+ # 机床上线时间段
+ first_online_duration = current_timestamp - int(equipment_obj.equipment_id.first_online_time.timestamp())
+
+ if equipment_obj.online_time:
+ equipment_obj.offline_time = round((first_online_duration - float(equipment_obj.online_time)) / 3600, 2)
+ else:
+ equipment_obj.offline_time = False
+ # equipment_obj.offline_time = equipment_obj.equipment_id.first_online_time - (
+ # float(equipment_obj.online_time) if equipment_obj.online_time else 0)
+
# 获取日志详情
def get_day_logs(self):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
@@ -150,12 +213,11 @@ class SfMaintenanceEquipmentOEE(models.Model):
self.fault_nums = real_dict['alarm_last_24_nums']
self.idle_nums = real_dict['idle_count']
self.work_time = round(
- (convert_to_seconds(real_dict['cut_time']) - convert_to_seconds(real_dict['cut_24_time'])) / 3600,
+ (convert_to_seconds(real_dict['cut_time']) - convert_to_seconds(
+ real_dict['cut_24_time'])) / 3600,
2)
self.offline_time = 24 - (float(self.online_time) if self.online_time else 0)
-
-
if response.status_code == 200:
result = response.json()
print('============', result)
diff --git a/sf_maintenance/views/maintenance_equipment_oee_views.xml b/sf_maintenance/views/maintenance_equipment_oee_views.xml
index 98d6dec5..a78408e6 100644
--- a/sf_maintenance/views/maintenance_equipment_oee_views.xml
+++ b/sf_maintenance/views/maintenance_equipment_oee_views.xml
@@ -79,12 +79,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -109,7 +109,7 @@
-
+
@@ -132,7 +132,7 @@
-
+
diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py
index f44915f1..2a5e4d3e 100644
--- a/sf_manufacturing/controllers/controllers.py
+++ b/sf_manufacturing/controllers/controllers.py
@@ -189,6 +189,7 @@ class Manufacturing_Connect(http.Controller):
request.env['sf.production.plan'].sudo().search([('production_id', '=', production_id)]).write(
{'actual_start_time': workorder.date_start,
'state': 'processing'})
+ res.update({'workorder_id': workorder.id})
except Exception as e:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index 496c6a10..1635b9fd 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -950,6 +950,8 @@ class MrpProduction(models.Model):
if production.programming_no in program_to_production_names:
productions_not_delivered = self.env['mrp.production'].search(
[('programming_no', '=', production.programming_no), ('programming_state', '=', '已编程未下发')])
+ productions = self.env['mrp.production'].search(
+ [('programming_no', '=', production.programming_no), ('state', 'not in', ('cancel', 'done'))])
rework_workorder = production.workorder_ids.filtered(lambda m: m.state == 'rework')
if rework_workorder:
for rework_item in rework_workorder:
@@ -962,6 +964,13 @@ class MrpProduction(models.Model):
productions_not_delivered.write(
{'state': 'progress', 'programming_state': '已编程', 'is_rework': False})
+ # 对制造订单所以面的cnc工单的程序用刀进行校验
+ try:
+ logging.info(f'已更新制造订单:{productions_not_delivered}')
+ productions.production_cnc_tool_checkout()
+ except Exception as e:
+ logging.info(f'对cnc工单的程序用刀进行校验报错:{e}')
+
# 从cloud获取重新编程过的最新程序
def get_new_program(self, processing_panel):
try:
diff --git a/sf_manufacturing/models/mrp_routing_workcenter.py b/sf_manufacturing/models/mrp_routing_workcenter.py
index 0c380ebd..a584379f 100644
--- a/sf_manufacturing/models/mrp_routing_workcenter.py
+++ b/sf_manufacturing/models/mrp_routing_workcenter.py
@@ -40,7 +40,7 @@ class ResMrpRoutingWorkcenter(models.Model):
def get_company_id(self):
self.company_id = self.env.user.company_id.id
- company_id = fields.Many2one('res.company', compute="get_company_id", related=False)
+ company_id = fields.Many2one('res.company', compute="get_company_id", related=False, store=True)
# 排产的时候, 根据坯料的长宽高比对一下机床的最大加工尺寸.不符合就不要分配给这个加工中心(机床).
# 工单对应的工作中心,根据工序中的工作中心去匹配,
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index 8e81d076..6c6b1bf8 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -774,8 +774,8 @@ class ResProductMo(models.Model):
# bfm下单
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
part_number = fields.Char(string='零件图号', readonly=True)
- machining_drawings = fields.Binary('2D加工图纸', readonly=True)
- quality_standard = fields.Binary('质检标准', readonly=True)
+ # machining_drawings = fields.Binary('2D加工图纸', readonly=True)
+ # quality_standard = fields.Binary('质检标准', readonly=True)
@api.constrains('tool_length')
def _check_tool_length_size(self):
@@ -875,8 +875,8 @@ class ResProductMo(models.Model):
'manual_quotation': item['manual_quotation'] or False,
'part_number': item.get('part_number') or '',
'active': True,
- 'machining_drawings': '' if not item['machining_drawings'] else base64.b64decode(item['machining_drawings']),
- 'quality_standard': '' if not item['quality_standard'] else base64.b64decode(item['quality_standard']),
+ # 'machining_drawings': '' if not item['machining_drawings'] else base64.b64decode(item['machining_drawings']),
+ # 'quality_standard': '' if not item['quality_standard'] else base64.b64decode(item['quality_standard']),
}
tax_id = self.env['account.tax'].sudo().search(
[('type_tax_use', '=', 'sale'), ('amount', '=', item.get('tax')), ('price_include', '=', 'True')])
diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv
index fd3b0d21..be71cb0d 100644
--- a/sf_manufacturing/security/ir.model.access.csv
+++ b/sf_manufacturing/security/ir.model.access.csv
@@ -103,10 +103,20 @@ access_mrp_production_split_multi_group_sf_mrp_user,access.mrp.production.split.
access_mrp_production_split_group_sf_mrp_user,access.mrp.production.split,mrp.model_mrp_production_split,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_production_split_line_group_sf_mrp_user,access.mrp.production.split.line,mrp.model_mrp_production_split_line,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_workcenter_capacity_manager_group_sf_mrp_user,mrp.workcenter.capacity.manager,mrp.model_mrp_workcenter_capacity,sf_base.group_sf_mrp_user,1,1,1,0
-
-
+access_mrp_workcenter_group_quality,mrp_workcenter_group_quality,model_mrp_workcenter,sf_base.group_quality,1,0,0,0
+access_mrp_workcenter_group_quality_director,mrp_workcenter_group_quality_director,model_mrp_workcenter,sf_base.group_quality_director,1,0,0,0
+access_sf_detection_result_group_quality,sf_detection_result_group_quality,model_sf_detection_result,sf_base.group_quality,1,0,1,0
+access_sf_detection_result_group_quality_director,sf_detection_result_group_quality_director,model_sf_detection_result,sf_base.group_quality_director,1,0,1,0
+access_mrp_workcenter_productivity_loss_group_quality,mrp_workcenter_productivity_loss_group_quality,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_quality,1,0,0,0
+access_mrp_workcenter_productivity_loss_group_quality_director,mrp_workcenter_productivity_loss_group_quality_director,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_quality_director,1,0,0,0
+access_mrp_workcenter_productivity_group_quality,mrp_workcenter_productivity_group_quality,mrp.model_mrp_workcenter_productivity,sf_base.group_quality,1,1,1,0
+access_mrp_workcenter_productivity_group_quality_director,mrp_workcenter_productivity_group_quality_director,mrp.model_mrp_workcenter_productivity,sf_base.group_quality_director,1,1,1,0
access_mrp_production_group_plan_dispatch,mrp_production,model_mrp_production,sf_base.group_plan_dispatch,1,1,0,0
-access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_plan_dispatch,1,1,1,0
+access_mrp_production_group_quality,mrp_production,model_mrp_production,sf_base.group_quality,1,1,0,0
+access_mrp_production_group_quality_director,mrp_production,model_mrp_production,sf_base.group_quality_director,1,1,0,0
+access_mrp_workorder_group_quality,mrp_workorder,model_mrp_workorder,sf_base.group_quality,1,1,0,0
+access_mrp_workorder_group_quality_director,mrp_workorder,model_mrp_workorder,sf_base.group_quality_director,1,1,0,0
+access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_plan_dispatch,1,1,0,0
access_sf_production_line_group_plan_dispatch,sf.production.line,model_sf_production_line,sf_base.group_plan_dispatch,1,0,0,0
access_sf_production_line_group_plan_director,sf.production.line,model_sf_production_line,sf_base.group_plan_director,1,1,1,0
access_sf_production_line,sf.production.line,model_sf_production_line,sf_maintenance.sf_group_equipment_user,1,1,1,0
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 3af811e6..8efd76db 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -586,6 +586,12 @@
position="after">
+
+
+ mrp.group_mrp_manager,sf_base.group_sf_mrp_manager,sf_base.group_sf_equipment_user,sf_base.group_sf_order_user
+
+
+
diff --git a/sf_message/controllers/main.py b/sf_message/controllers/main.py
index ab97816b..11e776dc 100644
--- a/sf_message/controllers/main.py
+++ b/sf_message/controllers/main.py
@@ -15,12 +15,13 @@ class MessageSfMrsConnect(Sf_Mrs_Connect):
def get_cnc_processing_create(self, **kw):
res = super(MessageSfMrsConnect, self).get_cnc_processing_create(**kw)
res = json.loads(res)
+ _logger.info('已进入消息推送:%s' % res)
if res.get('production_ids'):
try:
_logger.info('已编程的制造订单:%s' % res.get('production_ids'))
productions = request.env['mrp.production'].sudo().search([('id', 'in', res.get('production_ids'))])
# 过滤programming_state为已编程,tool_state为2的制造订单
- tool_state_valid_productions = productions.filtered(lambda x: x.programming_state == '已编程' and x.tool_state == '2')
+ tool_state_valid_productions = productions.filtered(lambda x: x.tool_state == '2')
if tool_state_valid_productions:
data = {
'name': tool_state_valid_productions[0].programming_no
@@ -38,3 +39,22 @@ class MessageSfMrsConnect(Sf_Mrs_Connect):
_logger.info('无效用刀异常消息推送接口:%s' % e)
return json.JSONEncoder().encode(res)
+ @http.route('/api/maintenance_logs/notify', type='json', auth='public', methods=['GET', 'POST'], csrf=False, cors="*")
+ def maintenance_logs_notify(self, **kw):
+ res = {'code': 200, 'message': '设备故障日志信息推送成功'}
+ datas = request.httprequest.data
+ ret = json.loads(datas)
+ log_id = ret.get('log_id')
+ if not log_id:
+ res = {'code': 400, 'message': '设备故障日志id不能为空'}
+ return json.JSONEncoder().encode(res)
+ try:
+ if not isinstance(log_id, list):
+ log_id = [log_id]
+ maintenance_logs = request.env['sf.maintenance.logs'].sudo().search([('id', 'in', [int(id) for id in log_id])])
+ if maintenance_logs:
+ maintenance_logs.add_queue('设备故障')
+ except Exception as e:
+ res = {'code': 400, 'message': '设备故障信息推送失败', 'error': str(e)}
+ return json.JSONEncoder().encode(res)
+
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index d9ac9ae1..a00ed056 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -58,17 +58,8 @@
订单发货提醒
stock.picking
-
-
-
-
-
-
-
-
-
-
+
装夹预调工单逾期预警
mrp.workorder
@@ -77,12 +68,12 @@
mrp.workorder
-
+
CNC加工工单逾期预警
mrp.workorder
- CNC工单已逾期
+ CNC加工工单已逾期
mrp.workorder
@@ -96,7 +87,7 @@
mrp.workorder
-
+
表面工艺工单逾期预警
mrp.workorder
@@ -111,5 +102,9 @@
quality.cnc.test
+
+ 设备故障
+ sf.maintenance.logs
+
\ No newline at end of file
diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml
index f095c9bd..736e3e91 100644
--- a/sf_message/data/cron_data.xml
+++ b/sf_message/data/cron_data.xml
@@ -26,7 +26,7 @@
-
+
检查工单是否完成并恢复正常时效
code
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index f511d338..057dc009 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -264,5 +264,16 @@
### 待质量判定提醒
事项:共有[{{judge_num}}]({{url}})个工单需判定质量结果
+
+ 设备故障
+
+ sf.maintenance.logs
+
+ markdown
+ urgent
+ ### 设备故障及异常提醒:
+机台号:[{{maintenance_equipment_id.name}}]({{url}})
+事项:{{create_date}}故障报警
+
\ No newline at end of file
diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py
index 25702b1e..0b9c9ad6 100644
--- a/sf_message/models/__init__.py
+++ b/sf_message/models/__init__.py
@@ -9,3 +9,4 @@ from . import sf_message_workorder
from . import sf_message_functional_tool_dismantle
from . import sf_message_mrp_production
from . import sf_message_quality_cnc_test
+from . import sf_message_maintenance_logs
diff --git a/sf_message/models/sf_message_maintenance_logs.py b/sf_message/models/sf_message_maintenance_logs.py
new file mode 100644
index 00000000..288043ff
--- /dev/null
+++ b/sf_message/models/sf_message_maintenance_logs.py
@@ -0,0 +1,22 @@
+from odoo import models, fields, api
+
+class SFMessageMaintenanceLogs(models.Model):
+ _name = 'sf.maintenance.logs'
+ _inherit = ['sf.maintenance.logs', 'jikimo.message.dispatch']
+
+ @api._model_create_multi
+ def create(self, vals_list):
+ res = super(SFMessageMaintenanceLogs, self).create(vals_list)
+ for rec in res:
+ rec.add_queue()
+ return res
+
+ def _get_message(self, message_queue_ids):
+ contents = super(SFMessageMaintenanceLogs, self)._get_message(message_queue_ids)
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
+ action_id = self.env.ref('sf_maintenance.action_maintenance_logs').id
+ for index, content in enumerate(contents):
+ maintenance_logs_id = self.env['sf.maintenance.logs'].browse(message_queue_ids[index].res_id)
+ url = url + '/web#id=%s&view_type=form&action=%s' % (maintenance_logs_id.id, action_id)
+ contents[index] = content.replace('{{url}}', url)
+ return contents
\ No newline at end of file
diff --git a/sf_message/models/sf_message_mrp_production.py b/sf_message/models/sf_message_mrp_production.py
index 44a100f3..a60f2161 100644
--- a/sf_message/models/sf_message_mrp_production.py
+++ b/sf_message/models/sf_message_mrp_production.py
@@ -1,3 +1,4 @@
+import logging
import re
from odoo import models, fields, api, _
from urllib.parse import urlencode
@@ -35,19 +36,20 @@ class SFMessageMrpProduction(models.Model):
[('origin', '=', mrp_production.origin), ('picking_type_id.sequence_code', '=', 'SFP'),
('state', '=', 'assigned')], limit=1)
if stock_picking_sfp:
- url = self.request_url()
+ url = self.request_url(stock_picking_sfp.id)
content = content.replace('{{name}}', stock_picking_sfp.name).replace(
'{{sale_order_name}}', mrp_production.origin).replace('{{request_url}}', url)
contents.append(content)
+ logging.info('生产完工入库提醒: %s' % contents)
return contents
- def request_url(self):
+ def request_url(self, id):
url = self.env['ir.config_parameter'].get_param('web.base.url')
- action_id = self.env.ref('mrp.mrp_production_action').id
+ action_id = self.env.ref('stock.action_picking_tree_all').id
menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id
# 查询参数
- params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.production',
- 'view_type': 'kanban'}
+ params = {'id': id, 'menu_id': menu_id, 'action': action_id, 'model': 'mrp.production',
+ 'view_type': 'form'}
# 拼接查询参数
query_string = urlencode(params)
# 拼接URL
diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py
index d98b475f..9d7c7f0e 100644
--- a/sf_message/models/sf_message_stock_picking.py
+++ b/sf_message/models/sf_message_stock_picking.py
@@ -1,3 +1,4 @@
+import logging
import re
from odoo import models, fields, api, _
from urllib.parse import urlencode
@@ -40,9 +41,10 @@ class SFMessageStockPicking(models.Model):
('picking_type_id.sequence_code', '=', 'OUT')])
if stock_picking_out and len(stock_picking_out) > 0:
content = message_queue_id.message_template_id.content
- url = self.request_url()
+ url = self.request_url1(stock_picking_out.id)
content = content.replace('{{name}}', stock_picking_out.name).replace(
'{{sale_order_name}}', stock_picking_out.origin).replace('{{request_url}}', url)
+ logging.info('订单发货提醒: %s' % content)
return content
def _get_message(self, message_queue_ids):
@@ -96,3 +98,16 @@ class SFMessageStockPicking(models.Model):
# 拼接URL
full_url = url + "/web#" + query_string
return full_url
+
+ def request_url1(self, id):
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
+ action_id = self.env.ref('stock.action_picking_tree_all').id
+ menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id
+ # 查询参数
+ params = {'id': id, 'menu_id': menu_id, 'action': action_id, 'model': 'stock.picking',
+ 'view_type': 'form'}
+ # 拼接查询参数
+ query_string = urlencode(params)
+ # 拼接URL
+ full_url = url + "/web#" + query_string
+ return full_url
diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py
index 56346c27..8d1a2b9d 100644
--- a/sf_message/models/sf_message_template.py
+++ b/sf_message/models/sf_message_template.py
@@ -14,4 +14,6 @@ class SfMessageTemplate(models.Model):
res.append('sf.functional.tool.dismantle')
res.append('purchase.order')
res.append('mrp.workorder')
+ res.append('sf.maintenance.logs')
+ res.append('quality.cnc.test')
return res
diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py
index e432938c..3ad17d93 100644
--- a/sf_message/models/sf_message_workorder.py
+++ b/sf_message/models/sf_message_workorder.py
@@ -12,7 +12,7 @@ class SFMessageWork(models.Model):
_name = 'mrp.workorder'
_inherit = ['mrp.workorder', 'jikimo.message.dispatch']
- @api.depends('production_availability', 'blocked_by_workorder_ids.state')
+ @api.depends('production_availability', 'blocked_by_workorder_ids.state', 'production_id.tool_state')
def _compute_state(self):
super(SFMessageWork, self)._compute_state()
for workorder in self:
@@ -109,16 +109,21 @@ class SFMessageWork(models.Model):
for item in orders:
if item.date_planned_finished:
current_time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- current_time_datetime = datetime.strptime(current_time_str, '%Y-%m-%d %H:%M:%S')
+ current_time = self.env['sf.sync.common'].sudo().get_add_time(current_time_str)
+ current_time_datetime = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S')
date_planned_finished_str = self.env['sf.sync.common'].sudo().get_add_time(
item.date_planned_finished.strftime("%Y-%m-%d %H:%M:%S"))
date_planned_finished = datetime.strptime(date_planned_finished_str, '%Y-%m-%d %H:%M:%S')
- logging.info(f"Workorder: {item.production_id.name}, Current Time: {current_time_datetime}, "
- f"Planned Finish: {date_planned_finished}")
twelve_hours_ago = current_time_datetime - timedelta(hours=12)
if current_time_datetime >= date_planned_finished:
+ logging.info("------overdue-------")
+ logging.info(f"Workorder: {item.production_id.name}, Current Time: {current_time_datetime}, "
+ f"Planned Finish: {date_planned_finished}")
item.delivery_warning = 'overdue'
elif twelve_hours_ago <= current_time_datetime <= date_planned_finished:
+ logging.info("------warning-------")
+ logging.info(f"Workorder: {item.production_id.name}, Current Time: {current_time_datetime}, "
+ f"Planned Finish: {date_planned_finished}")
item.delivery_warning = 'warning'
business_node_ids = {
'装夹预调': self.env.ref('sf_message.bussiness_mrp_workorder_pre_overdue_warning').id,
@@ -148,6 +153,6 @@ class SFMessageWork(models.Model):
getattr(item, queue_method_name)(*args)
def _recover_time_warning_func(self):
- workorder_done = self.env['mrp.workorder'].search([("state", "=", "done")])
+ workorder_done = self.env['mrp.workorder'].search([("state", "in", ["done", "rework", "cancel"])])
workorder_overdue = workorder_done.filtered(lambda x: x.delivery_warning in ['overdue', 'warning'])
workorder_overdue.write({'delivery_warning': 'normal'})
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index cb56287a..39b4ad8a 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -3,11 +3,12 @@ import logging
import os
import json
import base64
-from odoo import http
+from odoo import http, fields, models
from odoo.http import request
+from odoo.addons.sf_base.controllers.controllers import MultiInheritController
-class Sf_Mrs_Connect(http.Controller):
+class Sf_Mrs_Connect(http.Controller, MultiInheritController):
@http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
cors="*")
@@ -81,24 +82,29 @@ class Sf_Mrs_Connect(http.Controller):
if files_panel:
for file in files_panel:
file_extension = os.path.splitext(file)[1]
- logging.info('file_extension:%s' % file_extension)
if file_extension.lower() == '.pdf':
panel_file_path = os.path.join(program_path_tmp_panel, file)
logging.info('panel_file_path:%s' % panel_file_path)
+ logging.info('更新工作指令:%s' % cnc_workorder)
cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
+ logging.info('更新工作指令完成:%s' % cnc_workorder)
pre_workorder = productions.workorder_ids.filtered(
lambda ap: ap.routing_type == '装夹预调' and ap.state not in ['done', 'rework'
'cancel'] and ap.processing_panel == panel)
if pre_workorder:
+ logging.info('更新加工图纸:%s' % pre_workorder)
pre_workorder.write(
{'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
+ logging.info('更新加工图纸完成:%s' % pre_workorder)
productions.write({'programming_state': '已编程', 'work_state': '已编程'})
+ logging.info('已更新制造订单编程状态:%s' % productions.ids)
res.update({
'production_ids': productions.ids
})
# 对制造订单所以面的cnc工单的程序用刀进行校验
try:
+ logging.info(f'已更新制造订单:{productions}')
productions.production_cnc_tool_checkout()
except Exception as e:
logging.info(f'对cnc工单的程序用刀进行校验报错:{e}')
@@ -110,5 +116,6 @@ class Sf_Mrs_Connect(http.Controller):
return json.JSONEncoder().encode(res)
except Exception as e:
res = {'status': -1, 'message': '系统解析失败'}
+ request.cr.rollback()
logging.info('get_cnc_processing_create error:%s' % e)
return json.JSONEncoder().encode(res)
diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py
index f3fe5dbd..f911fb43 100644
--- a/sf_quality/models/quality_cnc_test.py
+++ b/sf_quality/models/quality_cnc_test.py
@@ -31,19 +31,31 @@ class SfQualityCncTest(models.Model):
("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")
detailed_reason = fields.Text('详细原因')
+ # machining_drawings = fields.Binary(related='workorder_id.machining_drawings', string='2D加工图纸', readonly=True)
+ # quality_standard = fields.Binary(related='workorder_id.quality_standard', string='质检标准', readonly=True)
+
def submit_pass(self):
- self.write({'result': 'pass', 'test_results': self.test_results, 'state': 'done'})
+ if self.test_results in ['返工', '报废']:
+ raise UserError(_('请重新选择【判定结果】-【检测结果】'))
+ self.write({'result': 'pass', 'test_results': '合格', 'state': 'done'})
self.workorder_id.write({'test_results': self.test_results})
self.workorder_id.button_finish()
def submit_fail(self):
- if not self.reason and not self.detailed_reason and not self.test_results:
+ if not self.test_results:
raise UserError(_('请填写【判定结果】里的信息'))
- else:
- self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'})
- self.workorder_id.write(
- {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason})
- self.workorder_id.button_finish()
+ if self.test_results == '合格':
+ raise UserError(_('请重新选择【判定结果】-【检测结果】'))
+ self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'})
+ self.workorder_id.write(
+ {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason})
+ self.workorder_id.button_finish()
+
+ @api.onchange('test_results')
+ def _onchange_test_results(self):
+ if self.test_results == '合格':
+ self.reason = False
+ self.detailed_reason = False
class SfQualityWorkOrder(models.Model):
@@ -62,7 +74,9 @@ class SfQualityWorkOrder(models.Model):
def write(self, vals):
res = super(SfQualityWorkOrder, self).write(vals)
- if self.state == 'to be detected':
- quality_cnc_test = self.env['quality.cnc.test'].search([('workorder_id', '=', self.id)])
- if not quality_cnc_test:
- self.env['quality.cnc.test'].sudo().create({'workorder_id': self.id})
+ for item in self:
+ if item.state == 'to be detected':
+ quality_cnc_test = self.env['quality.cnc.test'].search([('workorder_id', '=', item.id)])
+ if not quality_cnc_test:
+ self.env['quality.cnc.test'].sudo().create({'workorder_id': item.id})
+ return res
diff --git a/sf_quality/views/quality_cnc_test_view.xml b/sf_quality/views/quality_cnc_test_view.xml
index a9bceffe..85f92bfb 100644
--- a/sf_quality/views/quality_cnc_test_view.xml
+++ b/sf_quality/views/quality_cnc_test_view.xml
@@ -5,7 +5,7 @@
加工质检单编码规则
quality.cnc.test
QCT
- 4
+ 5
@@ -20,10 +20,12 @@
-
-
-
-
+
+
@@ -89,7 +91,6 @@
-
@@ -99,17 +100,19 @@
-
-
+
+
-
+
-
+
-
+
@@ -171,7 +174,7 @@
驾驶舱
ir.actions.act_window
quality.cnc.test
- kanban,form
+ kanban,tree,form
[]
diff --git a/sf_quality/views/view.xml b/sf_quality/views/view.xml
index 1ed999d6..e0b2064b 100644
--- a/sf_quality/views/view.xml
+++ b/sf_quality/views/view.xml
@@ -34,36 +34,36 @@
-
- quality.point.form.inherit.sf
- quality.point
-
-
-
-
-
-
- custom_required
- 1
-
-
- custom_required
- 1
-
-
-
+
+ quality.point.form.inherit.sf
+ quality.point
+
+
+
+
+
+
+ custom_required
+ 1
+
+
+ custom_required
+ 1
+
+
+
-
- sf.quality.point.form.inherit.sf
- quality.point
-
-
-
- custom_required
-
-
- custom_required
-
-
-
+
+ sf.quality.point.form.inherit.sf
+ quality.point
+
+
+
+ custom_required
+
+
+ custom_required
+
+
+
diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py
index f28a76c4..d3ec1aa0 100644
--- a/sf_sale/models/sale_order.py
+++ b/sf_sale/models/sale_order.py
@@ -57,7 +57,6 @@ class ReSaleOrder(models.Model):
delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')], string='时效')
-
# 业务平台分配工厂后在智能工厂先创建销售订单
def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address,
deadline_of_delivery, payments_way, pay_way):
@@ -128,7 +127,9 @@ class ReSaleOrder(models.Model):
'price_unit': product.list_price,
'product_uom_qty': item['number'],
'model_glb_file': base64.b64decode(item['model_file']),
- 'remark': item.get('remark')
+ 'remark': item.get('remark'),
+ 'is_incoming_material': item.get('is_incoming_material'),
+ 'incoming_size': item.get('incoming_size'),
}
return self.env['sale.order.line'].with_context(skip_procurement=True).create(vals)
@@ -169,6 +170,9 @@ class ResaleOrderLine(models.Model):
check_status = fields.Selection(related='order_id.check_status')
remark = fields.Char('备注')
+ is_incoming_material = fields.Boolean('是否带料', default=False)
+ incoming_size = fields.Char('带料尺寸')
+
@api.depends('product_template_id')
def _compute_model_glb_file(self):
for line in self:
diff --git a/sf_sale/views/quick_easy_order_view.xml b/sf_sale/views/quick_easy_order_view.xml
index aebb4e97..9111403d 100644
--- a/sf_sale/views/quick_easy_order_view.xml
+++ b/sf_sale/views/quick_easy_order_view.xml
@@ -80,8 +80,8 @@
-
-
+
+
diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml
index 61b53b08..be8c469b 100644
--- a/sf_sale/views/sale_order_view.xml
+++ b/sf_sale/views/sale_order_view.xml
@@ -118,6 +118,8 @@
+
+
{'readonly': [('state', 'in', ['cancel','sale'])]}
@@ -162,6 +164,11 @@
拒绝接单
+
+
+
+
+
@@ -265,7 +272,6 @@
-
{"search_default_categ_id":1,
"search_default_filter_to_sell":1,"sale_multi_pricelist_product_template": 1}
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 2e90f76f..237d5b91 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -687,7 +687,7 @@ class FunctionalToolAssembly(models.Model):
sf_cam_work_order_program_knife_plan_id = fields.Many2one('sf.cam.work.order.program.knife.plan',
'CAM工单程序用刀计划', readonly=True)
- active = fields.Boolean(string='已归档', default=True, groups='base.user_root')
+ active = fields.Boolean(string='已归档', default=True)
code = fields.Char('功能刀具编码', compute='_compute_code')
diff --git a/sf_tool_management/models/functional_tool.py b/sf_tool_management/models/functional_tool.py
index 6cfaee2d..e8523cd3 100644
--- a/sf_tool_management/models/functional_tool.py
+++ b/sf_tool_management/models/functional_tool.py
@@ -554,7 +554,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
sf_functional_tool_entity_ids = fields.One2many('sf.functional.cutting.tool.entity', 'safe_inventory_id',
string='功能刀具信息')
- active = fields.Boolean(string='已归档', default=True, groups='base.user_root')
+ active = fields.Boolean(string='已归档', default=True)
@api.depends('functional_name_id', 'functional_name_id.diameter', 'functional_name_id.angle',
'functional_name_id.functional_cutting_tool_model_id')
diff --git a/sf_tool_management/models/mrp_workorder.py b/sf_tool_management/models/mrp_workorder.py
index 96198cbb..267dbe60 100644
--- a/sf_tool_management/models/mrp_workorder.py
+++ b/sf_tool_management/models/mrp_workorder.py
@@ -170,11 +170,14 @@ class MrpProduction(models.Model):
# 修改cnc程序的‘刀具状态’
workorder_ids = self.env['mrp.workorder'].sudo().search([('production_id', 'in', self.ids)])
if invalid_tool:
+ logging.info(f'无效刀:{invalid_tool}')
# 修改cnc程序的‘刀具状态’为 ‘无效刀’
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
[('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', invalid_tool)])
if cnc_ids:
- cnc_ids.write({'tool_state': '2'})
+ for cnc_id in cnc_ids:
+ cnc_id.tool_state = '2'
+ # cnc_ids.write({'tool_state': '2'})
# 创建制造订单无效刀检测结果记录
for production_id in self:
for processing_panel in list(set(invalid_tool_processing_panel)):
@@ -194,20 +197,27 @@ class MrpProduction(models.Model):
# 自动调用重新获取编程的方法
logging.info('cnc用刀校验到无效刀自动调用重新编程方法:update_programming_state()')
self[0].update_programming_state()
- # 修改制造订单 编程状态变为“编程中”
- self.write({'programming_state': '编程中', 'work_state': '编程中'})
+ self[0].write({'is_rework': False})
+ # 修改制造订单 编程状态变为“编程中” 制造订单状态为‘返工’
+ self.write({'programming_state': '编程中', 'work_state': '编程中', 'state': 'rework'})
if missing_tool_1:
+ logging.info(f'线边、机内缺刀:{missing_tool_1}')
# 修改 修改cnc程序的‘刀具状态’ 为 ‘缺刀’
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
[('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', missing_tool_1)])
if cnc_ids:
- cnc_ids.write({'tool_state': '1'})
- if missing_tool_2 and not invalid_tool:
+ for cnc_id in cnc_ids:
+ cnc_id.tool_state = '1'
+ # cnc_ids.write({'tool_state': '1'})
+ if missing_tool_2 and invalid_tool == []:
+ logging.info(f'库存缺刀:{missing_tool_2}')
# 调用CAM工单程序用刀计划创建方法
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
- [('workorder_id', 'in', workorder_ids.filtered(lambda a: a.production_id == self[0].id).ids),
+ [('workorder_id', 'in', workorder_ids.filtered(lambda a: a.production_id == self[0]).ids),
('cutting_tool_name', 'in', missing_tool_2)])
if cnc_ids:
logging.info('调用CAM工单程序用刀计划创建方法!!!')
self.env['sf.cam.work.order.program.knife.plan'].sudo().create_cam_work_plan(cnc_ids)
+ if not invalid_tool and not missing_tool_1:
+ logging.info('校验cnc用刀正常!!!')
logging.info('工单cnc程序用刀校验完成!!!')