Accept Merge Request #1065: (hotfix/优化多次编程单下发 -> develop)

Merge Request: 优化多次编程单下发

Created By: @杨金灵
Reviewed By: @马广威
Approved By: @马广威 
Accepted By: @杨金灵
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1065
This commit is contained in:
杨金灵
2024-06-06 09:40:06 +08:00
committed by Coding
3 changed files with 74 additions and 51 deletions

View File

@@ -1151,21 +1151,13 @@ class CNCprocessing(models.Model):
logging.info('splitext(f):%s' % os.path.splitext(f)[1]) logging.info('splitext(f):%s' % os.path.splitext(f)[1])
if os.path.splitext(f)[1] == ".pdf": if os.path.splitext(f)[1] == ".pdf":
full_path = os.path.join(serverdir, root, f) full_path = os.path.join(serverdir, root, f)
logging.info('full_path:%s' % full_path) cnc_processing.workorder_id.cnc_worksheet = base64.b64encode(
logging.info('routing_type:%s' % cnc_processing.workorder_id.routing_type) open(full_path, 'rb').read())
logging.info('cnc_worksheet:%s' % cnc_processing.workorder_id.cnc_worksheet) else:
# with open(full_path, 'rb') as pdf_file: if f in program_path:
# file_content = pdf_file.read() # if cnc_processing.program_name == f.split('.')[0]:
# cnc_processing.workorder_id.cnc_worksheet = base64.b64encode(file_content) cnc_file_path = os.path.join(serverdir, root, f)
if not cnc_processing.workorder_id.cnc_worksheet: self.write_file(cnc_file_path, cnc_processing)
logging.info('full_path111555:%s' % full_path)
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]:
cnc_file_path = os.path.join(serverdir, root, f)
self.write_file(cnc_file_path, cnc_processing)
# 创建附件(nc文件) # 创建附件(nc文件)
def attachment_create(self, name, data): def attachment_create(self, name, data):

View File

@@ -24,12 +24,22 @@ class Sf_Mrs_Connect(http.Controller):
ret = json.loads(datas) ret = json.loads(datas)
ret = json.loads(ret['result']) ret = json.loads(ret['result'])
logging.info('下发编程单:%s' % ret) logging.info('下发编程单:%s' % ret)
is_delete_file = False
# 查询状态为进行中且类型为获取CNC加工程序的工单 # 查询状态为进行中且类型为获取CNC加工程序的工单
cnc_production = request.env['mrp.production'].with_user( cnc_production = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'].split(',')[0])]) request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'].split(',')[0])])
cnc_program = request.env['mrp.production'].with_user( cnc_program = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search( request.env.ref("base.user_admin")).search(
[('programming_no', '=', cnc_production.programming_no), ('id', '!=', cnc_production.id)]) [('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)
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( # cnc_program = request.env['mrp.production'].with_user(
# request.env.ref("base.user_admin")).search([('programming_no', '=', cnc_production.programming_no)]) # request.env.ref("base.user_admin")).search([('programming_no', '=', cnc_production.programming_no)])
logging.info('制造订单号:%s' % cnc_production.name) logging.info('制造订单号:%s' % cnc_production.name)
@@ -37,6 +47,13 @@ class Sf_Mrs_Connect(http.Controller):
# if ret['glb_file']: # if ret['glb_file']:
# cnc_production.glb_file = base64.b64encode(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']: for r in ret['processing_panel']:
download_state = request.env['sf.cnc.processing'].with_user( download_state = request.env['sf.cnc.processing'].with_user(
request.env.ref("base.user_admin")).download_file_tmp( request.env.ref("base.user_admin")).download_file_tmp(
@@ -64,15 +81,17 @@ class Sf_Mrs_Connect(http.Controller):
if cnc_processing: if cnc_processing:
cnc_processing_arr.append(cnc_processing._json_cnc_processing(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): 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: if cnc_program and cnc_processing_arr:
cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'}) 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( {'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_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write(
{'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered( {'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 cnc_program |= cnc_production
if not cnc_program and cnc_processing_arr: if not cnc_program and cnc_processing_arr:
cnc_program = cnc_production cnc_program = cnc_production

View File

@@ -311,41 +311,53 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
'applicant': None, 'applicant': None,
'sf_functional_tool_assembly_id': 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工单程序用刀计划 根据传入的工单信息查询是否有需要的功能刀具如果没有则生成CAM工单程序用刀计划
""" """
status = False for cnc_processing in cnc_processing_ids:
if cnc_processing.cutting_tool_name: status = False
functional_tools = self.env['sf.real.time.distribution.of.functional.tools'].sudo().search( if cnc_processing.cutting_tool_name:
[('name', '=', cnc_processing.cutting_tool_name)]) functional_tools = self.env['sf.real.time.distribution.of.functional.tools'].sudo().search(
if functional_tools: [('name', '=', cnc_processing.cutting_tool_name)])
for functional_tool in functional_tools: if functional_tools:
if functional_tool.on_tool_stock_num == 0: for functional_tool in functional_tools:
if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0: if functional_tool.on_tool_stock_num == 0:
status = True if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0:
else: status = True
status = True else:
if status: status = True
knife_plan = self.env['sf.cam.work.order.program.knife.plan'].sudo().create({ if status:
'name': cnc_processing.workorder_id.production_id.name, knife_plan = self.env['sf.cam.work.order.program.knife.plan'].sudo().create({
'cam_procedure_code': cnc_processing.program_name, 'name': cnc_processing.workorder_id.production_id.name,
'filename': cnc_processing.cnc_id.name, 'cam_procedure_code': cnc_processing.program_name,
'functional_tool_name': cnc_processing.cutting_tool_name, 'filename': cnc_processing.cnc_id.name,
'cam_cutter_spacing_code': cnc_processing.cutting_tool_no, 'functional_tool_name': cnc_processing.cutting_tool_name,
'process_type': cnc_processing.processing_type, 'cam_cutter_spacing_code': cnc_processing.cutting_tool_no,
'margin_x_y': float(cnc_processing.margin_x_y), 'process_type': cnc_processing.processing_type,
'margin_z': float(cnc_processing.margin_z), 'margin_x_y': float(cnc_processing.margin_x_y),
'finish_depth': float(cnc_processing.depth_of_processing_z), 'margin_z': float(cnc_processing.margin_z),
'extension_length': float(cnc_processing.cutting_tool_extension_length), 'finish_depth': float(cnc_processing.depth_of_processing_z),
'shank_model': cnc_processing.cutting_tool_handle_type, 'extension_length': float(cnc_processing.cutting_tool_extension_length),
'estimated_processing_time': cnc_processing.estimated_processing_time, 'shank_model': cnc_processing.cutting_tool_handle_type,
}) 'estimated_processing_time': cnc_processing.estimated_processing_time,
logging.info('CAM工单程序用刀计划创建成功') })
# 创建装刀请求 logging.info('CAM工单程序用刀计划创建成功')
knife_plan.apply_for_tooling() # 创建装刀请求
else: knife_plan.apply_for_tooling()
logging.info('功能刀具【%s】满足CNC用刀需求' % cnc_processing.cutting_tool_name) 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 in ('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): class FunctionalToolAssembly(models.Model):