From 3c3e5216d69b67c7c00fc01df535cd02df55597b Mon Sep 17 00:00:00 2001 From: gqh Date: Tue, 27 Sep 2022 18:16:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=90=8C=E6=AD=A5=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/sf_base.py | 1 - sf_base/models/sf_common.py | 6 +- sf_mrs_sync/data/sf_cron.xml | 114 +++++++- sf_mrs_sync/models/sf_sync_common.py | 422 +++++++++++++++++++++++++-- 4 files changed, 523 insertions(+), 20 deletions(-) diff --git a/sf_base/models/sf_base.py b/sf_base/models/sf_base.py index 431e14d8..4459d4dd 100644 --- a/sf_base/models/sf_base.py +++ b/sf_base/models/sf_base.py @@ -32,7 +32,6 @@ class MachineBrand(models.Model): tag_ids = fields.Many2many('mrs.machine.brand.tags', 'rel_machine_brand_tags', string='类别') image_brand = fields.Image("品牌图片") active = fields.Boolean('有效', default=True) - code = fields.Char('编码') diff --git a/sf_base/models/sf_common.py b/sf_base/models/sf_common.py index 8dd8ac93..40f1fcd8 100644 --- a/sf_base/models/sf_common.py +++ b/sf_base/models/sf_common.py @@ -14,6 +14,7 @@ class MrsProductionMaterials(models.Model): partner_ids = fields.Many2many('res.partner', 'materials_ids', '加工工厂') materials_model_ids = fields.One2many('mrs.materials.model', 'materials_id', '材料型号') materials_no = fields.Char("编码") + active = fields.Boolean('有效', default=True) # 材料型号 @@ -28,6 +29,7 @@ class MrsMaterialModel(models.Model): materials_id = fields.Many2one('mrs.production.materials', "材料名") materials_num = fields.Char("编码号") material_no = fields.Char("编码") + active = fields.Boolean('有效', default=True) # 工艺 编码,名称,备注 @@ -37,9 +39,10 @@ class MrsProductionProcess(models.Model): name = fields.Char('表面工艺') remark = fields.Text("备注") processing_technology_ids = fields.Many2many('mrs.processing.technology', 'mrs_associated_processes', - index=True) + index=True) partner_process_ids = fields.Many2many('res.partner', 'process_ids', '加工工厂') process_encode = fields.Char("编码") + active = fields.Boolean('有效', default=True) class MrsProcessingTechnology(models.Model): @@ -52,6 +55,7 @@ class MrsProcessingTechnology(models.Model): process_encode = fields.Char("编码") production_process_ids = fields.Many2many('mrs.production.process', 'mrs_associated_processes', index=True) + active = fields.Boolean('有效', default=True) class ProductTemplate(models.Model): diff --git a/sf_mrs_sync/data/sf_cron.xml b/sf_mrs_sync/data/sf_cron.xml index 1f01df0d..c6d5f9fc 100644 --- a/sf_mrs_sync/data/sf_cron.xml +++ b/sf_mrs_sync/data/sf_cron.xml @@ -1,6 +1,6 @@ - + 同步资源库材料 code @@ -10,4 +10,116 @@ -1 + + + 同步资源库材料型号 + + code + model.sync_materials_model() + 1 + minutes + -1 + + + + + + 同步资源库表面工艺 + + code + model.sync_production_process() + 1 + minutes + -1 + + + + + 同步资源库加工工艺 + + code + model.sync_processing_technology() + 1 + minutes + -1 + + + + + 同步资源库标签 + + code + model.sync_machine_brand_tags() + 1 + minutes + -1 + + + + + + 同步资源库控制系统 + + code + model.sync_machine_tool_type_control_system() + 1 + minutes + -1 + + + + + 同步资源库品牌 + + code + model.sync_machine_brand() + 1 + minutes + -1 + + + + + 同步资源库机床 + + code + model.sync_machine_tool() + 1 + minutes + -1 + + + + + 同步资源库机床型号 + + code + model.sync_machine_tool_type() + 1 + minutes + -1 + + + + + 同步资源库刀具类别 + + code + model.sync_cutting_tool_category() + 1 + minutes + -1 + + + + + 同步资源库刀具型号 + + code + model.sync_cutting_tool_type() + 1 + minutes + -1 + + \ No newline at end of file diff --git a/sf_mrs_sync/models/sf_sync_common.py b/sf_mrs_sync/models/sf_sync_common.py index aa84a9e0..13c74be8 100644 --- a/sf_mrs_sync/models/sf_sync_common.py +++ b/sf_mrs_sync/models/sf_sync_common.py @@ -7,6 +7,7 @@ from datetime import timedelta, datetime import requests import json import time +import hashlib import datetime from odoo import models, fields, api from odoo.exceptions import ValidationError @@ -15,6 +16,20 @@ import logging _logger = logging.getLogger(__name__) MRS = 'https://mrs.cs.jikimo.com' +# MRS = 'http://192.168.50.11:8069' + +TOKEN = '9524cba0-3e39-11ed-84ab-0242ac110003' +# TOKEN = '999e2cff-3e44-11ed-92e2-f8b54d90e788' +mrs_secret_key = 'HcSd4zh5AofCm73W' + + + +# TIMESTAMP = str(int(time.time())) +# check_str = '9524cba0-3e39-11ed-84ab-0242ac110003'+TIMESTAMP+'NIl6j3knJdhvUWKy' +# check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() +# HEADERS = {'TOKEN': '9524cba0-3e39-11ed-84ab-0242ac110003', +# 'TIMESTAMP': "", +# 'check_str': check_mrs_str} class MrsProductionMaterials(models.Model): @@ -22,72 +37,445 @@ class MrsProductionMaterials(models.Model): _description = "材料" url = '/api/production_materials/list' + # 定时同步材料 def sync_production_materials(self): - timestamp_str = int(time.time()) - headers = {'TOKEN': '4130d97c-37be-11ed-84a7-f8b54df29535', - 'TIMESTAMP': '1663859413', - 'check_str': 'e840309b4ac386b5b9005dfb85ca9e9eee7149bd'} - str = MRS + self.url - print(str) - r = requests.post(str, data=None, json={},headers=headers) + timestamp = int(time.time()) + check_str = '%s%s%s' % (TOKEN, timestamp, mrs_secret_key) + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': str(timestamp), + 'check_str': check_mrs_str} + + print(headers) + + r = requests.post((MRS + self.url), json={}, data=None, headers=headers) r = r.json() - data = json.loads(r['result']) - if data['status'] == 1: - production_materials_list = data['production_materials_list'] - if production_materials_list: - for item in production_materials_list: - port = self.env['mrs.production.materials'].search([('materials_no', '=', item.materials_no)]) - if not port: - port = item + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['production_materials_list']: + if item: + brand = self.env['mrs.production.materials'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.production.materials'].create({ + "id": item['id'], + "name": item['name'], + "materials_no": item['materials_no'], + "remark": item['remark'], + "active": item['active'] + + }) else: - return "访问失败" + raise ValidationError("访问失败") class MrsMaterialModel(models.Model): _inherit = 'mrs.materials.model' _description = '材料型号' + url = '/api/materials_model/list' + + # 定时同步材料型号 + def sync_materials_model(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + + print(headers) + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['materials_model_list']: + if item: + brand = self.env['mrs.materials.model'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.materials.model'].create({ + "id": item['id'], + "name": item['name'], + "materials_num": item['materials_num'], + "remark": item['remark'], + "active": item['active'], + "materials_id": item['materials_id'], + "need_h": item['need_h'], + "mf_materia_post": item['mf_materia_post'], + "density": item['density'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MrsProductionProcess(models.Model): _inherit = 'mrs.production.process' _description = '表面工艺' + url = '/api/production_process/list' + + # 定时同步表面工艺 + def sync_production_process(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['production_process_list']: + if item: + brand = self.env['mrs.production.process'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.production.process'].create({ + "id": item['id'], + "name": item['name'], + "process_enstatus": item['process_enstatus'], + "remark": item['remark'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MrsProcessingTechnology(models.Model): _inherit = 'mrs.processing.technology' _description = '加工工艺' + url = '/api/processing_technology/list' + + # 定时同步加工工艺 + def sync_processing_technology(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result[' processing_technology_list_all']: + if item: + brand = self.env['mrs.processing.technology'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.processing.technology'].create({ + "id": item['id'], + "name": item['name'], + "process_enstatus": item['process_enstatus'], + "remark": item['remark'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MachineBrandTags(models.Model): _inherit = 'mrs.machine.brand.tags' - _description = '标签' + _description = '品牌类别' + url = '/api/machine_brand_tags/list' + + # 定时同步品牌类别 + def sync_machine_brand_tags(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['machine_brand_tags_all_list']: + brand = self.env['mrs.machine.brand.tags'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.machine.brand.tags'].create({ + "id": item['id'], + "name": item['name'], + "color": item['color'], + + }) + else: + raise ValidationError("访问失败") class MachineControlSystem(models.Model): _inherit = 'mrs.machine_tool.type.control_system' _description = '控制系统' + url = '/api/machine_control_system/list' + + # 定时同步控制系统 + def sync_machine_tool_type_control_system(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['machine_control_system_list_all']: + if item: + brand = self.env['mrs.machine_tool.type.control_system'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.machine_tool.type.control_system'].create({ + "id": item['id'], + "name": item['name'], + "status": item['status'], + "brand_id": item['brand_id'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MachineBrand(models.Model): _inherit = 'mrs.machine.brand' _description = '品牌' + url = '/api/machine_brand/list' + + # 定时同步品牌 + def sync_machine_brand(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['machine_brand_all_list']: + brand = self.env['mrs.machine.brand'].search( + [("code", '=', item['code'])]) + if brand: + print(item['name']) + else: + self.env['mrs.machine.brand'].create({ + "id": item['id'], + "name": item['name'], + "code": item['code'], + # "image_brand": item['image_brand'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MachineTool(models.Model): _inherit = 'mrs.machine_tool' _description = '机床' + url = '/api/machine_tool/list' + + # 定时同步机床 + def sync_machine_tool(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['machine_tool_list']: + brand = self.env['mrs.machine_tool'].search( + [("code", '=', item['code'])]) + if brand: + print(item['name']) + else: + self.env['mrs.machine_tool'].create({ + "id": item['id'], + "name": item['name'], + "precision": item['precision'], + "status": item['status'], + "knife_type": item['knife_type'], + "registration_date": item['registration_date'], + "number_of_knife_library": item['number_of_knife_library'], + "rotate_speed": item['rotate_speed'], + "number_of_axles": item['number_of_axles'], + "control_system_id": item['control_system_id'], + "type_id": item['type_id'], + "brand_id": item['brand_id'], + "x_axis": item['x_axis'], + "y_axis": item['y_axis'], + "z_axis": item['z_axis'], + "b_axis": item['b_axis'], + "c_axis": item['c_axis'], + "state": item['state'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class MachineToolType(models.Model): _inherit = 'mrs.machine_tool.type' _description = '机床型号' + url = '/api/machine_tool_type/list' + + # 定时同步机床型号 + def sync_machine_tool_type(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['machine_tool_type_list']: + brand = self.env['mrs.machine_tool.type'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.machine_tool.type'].create({ + "id": item['id'], + "name": item['name'], + "code": item['code'], + "brand_id": item['brand_id'], + "number_of_knife_library": item['number_of_knife_library'], + "rotate_speed": item['rotate_speed'], + "machine_tool_id": item['machine_tool_id'], + "number_of_axles": item['number_of_axles'], + "x_axis": item['x_axis'], + "y_axis": item['y_axis'], + "z_axis": item['z_axis'], + "b_axis": item['b_axis'], + "c_axis": item['c_axis'], + "remark": item['remark'], + "precision": item['precision'], + "control_system_id": item['control_system_id'], + "active": item['active'] + + }) + else: + raise ValidationError("访问失败") class CuttingTool(models.Model): _inherit = 'mrs.cutting_tool.category' _description = '刀具类别' + url = '/api/cutting_tool_category/list' + + # 定时同步刀具类别 + def sync_cutting_tool_category(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['cutting_tool_category_list_all']: + brand = self.env['mrs.cutting_tool.category'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.cutting_tool.category'].create({ + "id": item['id'], + "name": item['name'], + "status": item['status'], + "remark": item['remark'], + "active": item['active'], + # "tag_ids": item['tag_ids'] + + }) + else: + raise ValidationError("访问失败") class CuttingToolType(models.Model): _inherit = 'mrs.cutting_tool.type' _description = '刀具型号' + url = '/api/cutting_tool_type/list' + + # 定时同步刀具型号 + def sync_cutting_tool_type(self): + timestamp = str(int(time.time())) + check_str = TOKEN + timestamp + mrs_secret_key + check_mrs_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest() + headers = {'TOKEN': TOKEN, + 'TIMESTAMP': timestamp, + 'check_str': check_mrs_str} + strUrl = MRS + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['cutting_tool_type_list_all']: + brand = self.env['mrs.cutting_tool.type'].search( + [("id", '=', item['id'])]) + if brand: + print(item['name']) + else: + self.env['mrs.cutting_tool.type'].create({ + "id": item['id'], + "name": item['name'], + "status": item['status'], + "remark": item['remark'], + "active": item['active'], + "diameter": item['diameter'], + "cone_angle_pitch": item['cone_angle_pitch'], + "shank_diameter": item['shank_diameter'], + "long_blade": item['long_blade'], + "taper_shank_length": item['taper_shank_length'], + "tool_length": item['tool_length'], + "blade_number": item['blade_number'], + "brand_id": item['brand_id'], + "category_id": item['category_id'] + }) + else: + raise ValidationError("访问失败")