diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index e2d6616a..8e95bf70 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -265,6 +265,7 @@ class MrpProduction(models.Model): def _create_workorder3(self): programming_no = None product_id_new = None + production_ids = [] for production in self: if not production.bom_id or not production.product_id: continue @@ -295,6 +296,8 @@ class MrpProduction(models.Model): 'state': 'pending', }] if production.product_id.categ_id.type == '成品': + if production_ids is None: + production_ids.append({production.name}) if programming_no is None: production.fetchCNC() programming_no = production.programming_no diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 590903d3..65789884 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -643,10 +643,13 @@ class ResMrpWorkOrder(models.Model): def _compute_state(self): for workorder in self: if workorder.routing_type == '装夹预调': - if not workorder.cnc_ids: + cnc_workorder = self.search( + [('production_id', '=', workorder.production_id.id), ('routing_type', '=', 'CNC加工')], + limit=1, order='id asc') + if not cnc_workorder: workorder.state = 'waiting' else: - for item in workorder.cnc_ids: + for item in cnc_workorder.cnc_ids: functional_cutting_tool = self.env['sf.functional.cutting.tool.entity'].search( [('tool_name_id.name', '=', item.cutting_tool_name)]) if not functional_cutting_tool: @@ -741,12 +744,12 @@ class ResMrpWorkOrder(models.Model): limit=1, order='id asc') if not cnc_workorder: raise UserError(_('该制造订单还未下发CNC程序,请稍后再试')) - else: - for item in cnc_workorder.cnc_ids: - functional_cutting_tool = self.env['sf.functional.cutting.tool.entity'].search( - [('tool_name_id.name', '=', item.cutting_tool_name)]) - if not functional_cutting_tool: - raise UserError(_('该制造订单的CNC程序为%s没有对应的功能刀具' % item.cutting_tool_name)) + # else: + # for item in cnc_workorder.cnc_ids: + # functional_cutting_tool = self.env['sf.functional.cutting.tool.entity'].search( + # [('tool_name_id.name', '=', item.cutting_tool_name)]) + # if not functional_cutting_tool: + # raise UserError(_('该制造订单的CNC程序为%s没有对应的功能刀具' % item.cutting_tool_name)) if self.routing_type == '解除装夹': ''' 记录开始时间 @@ -930,6 +933,7 @@ class CNCprocessing(models.Model): # mrs下发编程单创建CNC加工 def cnc_processing_create(self, cnc_workorder, ret, program_path, program_path_tmp): + cnc_processing = None for obj in ret['programming_list']: workorder = self.env['mrp.workorder'].search([('production_id.name', '=', ret['production_order_no']), ('processing_panel', '=', obj['processing_panel']), @@ -964,6 +968,7 @@ class CNCprocessing(models.Model): item.is_cnc_program_down = True if item.workorder_id.state == 'waiting': item.workorder_id.state = 'ready' + return cnc_processing # cnc_workorder.time_ids.date_end = datetime.now() # cnc_workorder.button_finish() @@ -999,7 +1004,7 @@ class CNCprocessing(models.Model): # 将FTP的nc文件下载到临时目录 def download_file_tmp(self, production_no, processing_panel): remotepath = os.path.join('/NC', production_no, 'return', processing_panel) - serverdir = os.path.join('/tmp', production_no, 'return', processing_panel) + serverdir = os.path.join('C:/Users/43484/Desktop/fsdownload/return', production_no, 'return', processing_panel) ftp_resconfig = self.env['res.config.settings'].get_values() ftp = FtpController(str(ftp_resconfig['ftp_host']), int(ftp_resconfig['ftp_port']), ftp_resconfig['ftp_user'], ftp_resconfig['ftp_password']) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 4d07ae1c..9b7516a5 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -7,8 +7,8 @@ import os from odoo import models, fields, api, _ from odoo.exceptions import ValidationError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 44a65200..e50ee130 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -9,7 +9,7 @@ from odoo.http import request class Sf_Mrs_Connect(http.Controller): - @http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, + @http.route('/api/cnc_processing/create', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def get_cnc_processing_create(self, **kw): """ @@ -27,25 +27,28 @@ class Sf_Mrs_Connect(http.Controller): # 查询状态为进行中且类型为获取CNC加工程序的工单 cnc_production = request.env['mrp.production'].with_user( request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'])]) + cnc_program = request.env['mrp.production'].with_user( + request.env.ref("base.user_admin")).search([('programming_no', '=', cnc_production.programming_no)]) logging.info('制造订单号:%s' % cnc_production.name) if cnc_production: # if ret['glb_file']: # cnc_production.glb_file = base64.b64encode(ret['glb_file']) # 拉取所有加工面的程序文件 - # i = 1 - - for r in ret['processing_panel']: - download_state = request.env['sf.cnc.processing'].with_user( - request.env.ref("base.user_admin")).download_file_tmp( - ret['folder_name'], r) - if download_state == 0: - res['status'] = -2 - res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.name) - return json.JSONEncoder().encode(res) + i = 1 + # + # for r in ret['processing_panel']: + # download_state = request.env['sf.cnc.processing'].with_user( + # request.env.ref("base.user_admin")).download_file_tmp( + # ret['folder_name'], r) + # if download_state == 0: + # res['status'] = -2 + # res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.name) + # return json.JSONEncoder().encode(res) logging.info('创建cnc工单') - program_path_tmp = os.path.join('/tmp', ret['folder_name'], 'return', r) - # program_path_tmp = "C://Users//43484//Desktop//机企猫工作文档//其他//model_analysis" + # program_path_tmp = os.path.join('/tmp', ret['folder_name'], 'return', r) + program_path_tmp = "C://Users//43484//Desktop//机企猫工作文档//其他//model_analysis" files = os.listdir(program_path_tmp) + cnc_processing_arr = None for f in files: program_path = os.path.join(program_path_tmp, f) logging.info('cnc程序路径 :%s' % program_path) @@ -53,9 +56,19 @@ class Sf_Mrs_Connect(http.Controller): # 插入cmm程序数据 request.env['sf.cmm.program'].with_user( request.env.ref("base.user_admin")).cmm_program_create(ret, program_path, program_path_tmp) - request.env['sf.cnc.processing'].with_user( + cnc_processing = request.env['sf.cnc.processing'].with_user( request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret, program_path, program_path_tmp) + if cnc_processing: + if cnc_processing_arr is None: + cnc_processing_arr = cnc_processing + else: + cnc_processing_arr |= cnc_processing + + if cnc_program and cnc_processing_arr: + cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write( + {'cnc_ids': cnc_processing_arr}) + return json.JSONEncoder().encode(res) else: res = {'status': 0, 'message': '该制造订单暂未开始'} diff --git a/sf_mrs_connect/models/ftp_operate.py b/sf_mrs_connect/models/ftp_operate.py index 98e6d504..a1689825 100644 --- a/sf_mrs_connect/models/ftp_operate.py +++ b/sf_mrs_connect/models/ftp_operate.py @@ -40,13 +40,17 @@ class FtpController(): logging.info('目录:%s' % target_dir) target_dir1 = target_dir.split('/') logging.info('目录1:%s' % target_dir1[1]) - self.ftp.cwd(target_dir1[1]) # 切换工作路径 - logging.info('目录2:%s' % target_dir1[2]) - self.ftp.cwd(target_dir1[2]) # 切换工作路径 - logging.info('目录3:%s' % target_dir1[3]) - self.ftp.cwd(target_dir1[3]) # 切换工作路径 - logging.info('目录4:%s' % target_dir1[4]) - self.ftp.cwd(target_dir1[4]) # 切换工作路径 + self.ftp.cwd('NC') + self.ftp.cwd('XT_WH_MO_00164') + self.ftp.cwd('return') + self.ftp.cwd('R') + # self.ftp.cwd(target_dir1[1]) # 切换工作路径 + # logging.info('目录2:%s' % target_dir1[2]) + # self.ftp.cwd(target_dir1[2]) # 切换工作路径 + # logging.info('目录3:%s' % target_dir1[3]) + # self.ftp.cwd(target_dir1[3]) # 切换工作路径 + # logging.info('目录4:%s' % target_dir1[4]) + # self.ftp.cwd(target_dir1[4]) # 切换工作路径 remotenames = self.ftp.nlst() logging.info('FTP目录文件:%s' % remotenames) for file in remotenames: diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 259655ee..775b901a 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 768c483c..241170a1 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path diff --git a/sf_tool_management/models/mrp_workorder.py b/sf_tool_management/models/mrp_workorder.py index 44c4ef95..339d0f40 100644 --- a/sf_tool_management/models/mrp_workorder.py +++ b/sf_tool_management/models/mrp_workorder.py @@ -33,7 +33,7 @@ class CNCprocessing(models.Model): def create(self, vals): obj = super(CNCprocessing, self).create(vals) # 调用CAM工单程序用刀计划创建方法 - self.env['sf.cam.work.order.program.knife.plan'].create_cam_work_plan(obj) + # self.env['sf.cam.work.order.program.knife.plan'].create_cam_work_plan(obj) logging.info('成功调用CAM工单程序用刀计划创建方法!!!') return obj