From e258e43b51ec67400af928516d822b6eb535efd7 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 5 Jun 2024 16:09:56 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E7=BC=96=E7=A8=8B=E5=8D=95=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/controllers/controllers.py | 18 ++++++++++++++---- sf_tool_management/models/base.py | 11 +++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 7498ec75..ddaa6fd5 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -30,6 +30,14 @@ class Sf_Mrs_Connect(http.Controller): cnc_program = request.env['mrp.production'].with_user( request.env.ref("base.user_admin")).search( [('programming_no', '=', cnc_production.programming_no), ('id', '!=', cnc_production.id)]) + if cnc_production.workorder_ids.filtered(lambda a: a.routing_type == 'CNC加工').cnc_ids: + cnc_production.workorder_ids.filtered( + lambda a1: a1.routing_type == 'CNC加工').cnc_ids.sudo().unlink() + request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(cnc_production) + if cnc_program.workorder_ids.filtered(lambda c: c.routing_type == 'CNC加工').cnc_ids: + cnc_program.workorder_ids.filtered( + lambda c1: c1.routing_type == 'CNC加工').cnc_ids.sudo().unlink() + request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(cnc_program) # 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) @@ -64,15 +72,17 @@ class Sf_Mrs_Connect(http.Controller): if cnc_processing: cnc_processing_arr.append(cnc_processing._json_cnc_processing(cnc_processing)) if (cnc_program and cnc_processing_arr) or (not cnc_program and cnc_processing_arr): - logging.info('cnc_processing_arr:%s' % cnc_processing_arr) + cnc_production.workorder_ids.filtered(lambda g: g.routing_type == '装夹预调').write( + {'processing_drawing': cnc_production.workorder_ids.filtered( + lambda g1: g1.routing_type == 'CNC加工').cnc_worksheet}) if cnc_program and cnc_processing_arr: cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'}) - cnc_program.workorder_ids.filtered(lambda b1: b1.routing_type == '装夹预调').write( + cnc_program.workorder_ids.filtered(lambda d: d.routing_type == '装夹预调').write( {'processing_drawing': cnc_production.workorder_ids.filtered( - lambda b1: b1.routing_type == 'CNC加工').cnc_worksheet}) + lambda d1: d1.routing_type == 'CNC加工').cnc_worksheet}) cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write( {'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered( - lambda b: b.routing_type == 'CNC加工').cnc_worksheet}) + lambda b1: b1.routing_type == 'CNC加工').cnc_worksheet}) cnc_program |= cnc_production if not cnc_program and cnc_processing_arr: cnc_program = cnc_production diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 4a440df6..3125cf01 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -347,6 +347,17 @@ class CAMWorkOrderProgramKnifePlan(models.Model): else: logging.info('功能刀具【%s】满足CNC用刀需求!!!' % cnc_processing.cutting_tool_name) + def unlink_cam_plan(self, production): + for item in production: + cam_plan_ids = self.env['sf.cam.work.order.program.knife.plan'].search([('name', '=', item.name)]) + for cam_plan_id in cam_plan_ids: + assembly_id = cam_plan_id.sf_functional_tool_assembly_id + if assembly_id.assemble_status == 0 and not assembly_id.start_preset_bool: + logging.info('%s删除成功!!!' % assembly_id) + assembly_id.sudo().unlink() + logging.info('unlink_cam_plan成功!!!') + cam_plan_ids.sudo().unlink() + class FunctionalToolAssembly(models.Model): _name = 'sf.functional.tool.assembly' From 17e2a3ffc3b31248fb6bed405fd8b71002b611dd Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 5 Jun 2024 16:26:34 +0800 Subject: [PATCH 2/5] =?UTF-8?q?cnc=E7=A8=8B=E5=BA=8F=E7=9A=84=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=8D=95=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index d8e6fe02..1751a9e3 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1039,10 +1039,8 @@ class CNCprocessing(models.Model): for f in files: if os.path.splitext(f)[1] == ".pdf": full_path = os.path.join(serverdir, root, f) - if full_path is not False: - if not cnc_processing.workorder_id.cnc_worksheet: - cnc_processing.workorder_id.cnc_worksheet = base64.b64encode( - open(full_path, 'rb').read()) + cnc_processing.workorder_id.cnc_worksheet = base64.b64encode( + open(full_path, 'rb').read()) else: if f in program_path: # if cnc_processing.program_name == f.split('.')[0]: From edf8e1004eef039b529d9f5a8659791b5e0fb78d Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 5 Jun 2024 17:00:17 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 3125cf01..cc12f7f2 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -352,7 +352,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model): cam_plan_ids = self.env['sf.cam.work.order.program.knife.plan'].search([('name', '=', item.name)]) for cam_plan_id in cam_plan_ids: assembly_id = cam_plan_id.sf_functional_tool_assembly_id - if assembly_id.assemble_status == 0 and not assembly_id.start_preset_bool: + if assembly_id.assemble_status in ('0', '待组装') and not assembly_id.start_preset_bool: logging.info('%s删除成功!!!' % assembly_id) assembly_id.sudo().unlink() logging.info('unlink_cam_plan成功!!!') From 5361fa7678e3af32d9a70b160305248e68b5d76b Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 5 Jun 2024 17:14:20 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcreate=5Fcam=5Fwork=5Fpla?= =?UTF-8?q?n=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 65 ++++++++++++++++--------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index cc12f7f2..e14094df 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -311,41 +311,42 @@ class CAMWorkOrderProgramKnifePlan(models.Model): 'applicant': None, 'sf_functional_tool_assembly_id': None}) - def create_cam_work_plan(self, cnc_processing): + def create_cam_work_plan(self, cnc_processing_ids): """ 根据传入的工单信息,查询是否有需要的功能刀具,如果没有则生成CAM工单程序用刀计划 """ - status = False - if cnc_processing.cutting_tool_name: - functional_tools = self.env['sf.real.time.distribution.of.functional.tools'].sudo().search( - [('name', '=', cnc_processing.cutting_tool_name)]) - if functional_tools: - for functional_tool in functional_tools: - if functional_tool.on_tool_stock_num == 0: - if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0: - status = True - else: - status = True - if status: - knife_plan = self.env['sf.cam.work.order.program.knife.plan'].sudo().create({ - 'name': cnc_processing.workorder_id.production_id.name, - 'cam_procedure_code': cnc_processing.program_name, - 'filename': cnc_processing.cnc_id.name, - 'functional_tool_name': cnc_processing.cutting_tool_name, - 'cam_cutter_spacing_code': cnc_processing.cutting_tool_no, - 'process_type': cnc_processing.processing_type, - 'margin_x_y': float(cnc_processing.margin_x_y), - 'margin_z': float(cnc_processing.margin_z), - 'finish_depth': float(cnc_processing.depth_of_processing_z), - 'extension_length': float(cnc_processing.cutting_tool_extension_length), - 'shank_model': cnc_processing.cutting_tool_handle_type, - 'estimated_processing_time': cnc_processing.estimated_processing_time, - }) - logging.info('CAM工单程序用刀计划创建成功!!!') - # 创建装刀请求 - knife_plan.apply_for_tooling() - else: - logging.info('功能刀具【%s】满足CNC用刀需求!!!' % cnc_processing.cutting_tool_name) + for cnc_processing in cnc_processing_ids: + status = False + if cnc_processing.cutting_tool_name: + functional_tools = self.env['sf.real.time.distribution.of.functional.tools'].sudo().search( + [('name', '=', cnc_processing.cutting_tool_name)]) + if functional_tools: + for functional_tool in functional_tools: + if functional_tool.on_tool_stock_num == 0: + if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0: + status = True + else: + status = True + if status: + knife_plan = self.env['sf.cam.work.order.program.knife.plan'].sudo().create({ + 'name': cnc_processing.workorder_id.production_id.name, + 'cam_procedure_code': cnc_processing.program_name, + 'filename': cnc_processing.cnc_id.name, + 'functional_tool_name': cnc_processing.cutting_tool_name, + 'cam_cutter_spacing_code': cnc_processing.cutting_tool_no, + 'process_type': cnc_processing.processing_type, + 'margin_x_y': float(cnc_processing.margin_x_y), + 'margin_z': float(cnc_processing.margin_z), + 'finish_depth': float(cnc_processing.depth_of_processing_z), + 'extension_length': float(cnc_processing.cutting_tool_extension_length), + 'shank_model': cnc_processing.cutting_tool_handle_type, + 'estimated_processing_time': cnc_processing.estimated_processing_time, + }) + logging.info('CAM工单程序用刀计划创建成功!!!') + # 创建装刀请求 + knife_plan.apply_for_tooling() + else: + logging.info('功能刀具【%s】满足CNC用刀需求!!!' % cnc_processing.cutting_tool_name) def unlink_cam_plan(self, production): for item in production: From 2eaec4fa58a27318a72adddc71fd8a6bb07c2a66 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 5 Jun 2024 18:03:08 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E7=A8=8B?= =?UTF-8?q?=E5=8D=95=E4=B8=8B=E5=8F=91=E6=97=B6=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=86=85tmp=E7=9B=AE=E5=BD=95=E4=B8=8B?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=BC=96=E7=A0=81=E5=B7=B2=E6=9C=89=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/controllers/controllers.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index ddaa6fd5..78a0c05a 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -24,6 +24,7 @@ class Sf_Mrs_Connect(http.Controller): ret = json.loads(datas) ret = json.loads(ret['result']) logging.info('下发编程单:%s' % ret) + is_delete_file = False # 查询状态为进行中且类型为获取CNC加工程序的工单 cnc_production = request.env['mrp.production'].with_user( request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'].split(',')[0])]) @@ -31,6 +32,7 @@ class Sf_Mrs_Connect(http.Controller): request.env.ref("base.user_admin")).search( [('programming_no', '=', cnc_production.programming_no), ('id', '!=', cnc_production.id)]) if cnc_production.workorder_ids.filtered(lambda a: a.routing_type == 'CNC加工').cnc_ids: + is_delete_file = True cnc_production.workorder_ids.filtered( lambda a1: a1.routing_type == 'CNC加工').cnc_ids.sudo().unlink() request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(cnc_production) @@ -45,6 +47,13 @@ class Sf_Mrs_Connect(http.Controller): # if ret['glb_file']: # cnc_production.glb_file = base64.b64encode(ret['glb_file']) # 拉取所有加工面的程序文件 + if is_delete_file is True: + program_path_tmp_r = os.path.join('/tmp', ret['folder_name'], 'return', 'R') + files_r = os.listdir(program_path_tmp_r) + if files_r: + for file_name in files_r: + file_path = os.path.join(program_path_tmp_r, file_name) + os.remove(file_path) for r in ret['processing_panel']: download_state = request.env['sf.cnc.processing'].with_user( request.env.ref("base.user_admin")).download_file_tmp(