修复中控对接接口

This commit is contained in:
jinling.yang
2024-07-25 10:27:07 +08:00
parent 30c823189c
commit c9d4f0667a
3 changed files with 32 additions and 27 deletions

View File

@@ -25,7 +25,8 @@ class Manufacturing_Connect(http.Controller):
{'content': ret, 'name': 'AutoDeviceApi/GetWoInfo'}) {'content': ret, 'name': 'AutoDeviceApi/GetWoInfo'})
logging.info('RfidCode:%s' % ret['RfidCode']) logging.info('RfidCode:%s' % ret['RfidCode'])
if 'RfidCode' in ret: if 'RfidCode' in ret:
workorder = request.env['mrp.workorder'].sudo().search([('rfid_code', '=', ret['RfidCode'])]) workorder = request.env['mrp.workorder'].sudo().search(
[('rfid_code', '=', ret['RfidCode']), ('state', '!=', 'rework')])
if workorder: if workorder:
for item in workorder: for item in workorder:
res['Datas'].append({ res['Datas'].append({
@@ -122,7 +123,8 @@ class Manufacturing_Connect(http.Controller):
logging.info('RfidCode:%s' % ret['RfidCode']) logging.info('RfidCode:%s' % ret['RfidCode'])
if 'RfidCode' in ret: if 'RfidCode' in ret:
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('routing_type', '=', '装夹预调'), ('rfid_code', '=', ret['RfidCode'])], limit=1, order='id asc') [('routing_type', '=', '装夹预调'), ('rfid_code', '=', ret['RfidCode']), ('state', '!=', 'rework')],
limit=1, order='id asc')
if workorder: if workorder:
for item in workorder: for item in workorder:
if item.material_center_point: if item.material_center_point:
@@ -163,7 +165,7 @@ class Manufacturing_Connect(http.Controller):
equipment_id = ret["DeviceId"] equipment_id = ret["DeviceId"]
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('production_id', '=', production_id), ('routing_type', '=', routing_type), [('production_id', '=', production_id), ('routing_type', '=', routing_type),
('rfid_code', '!=', False)], limit=1) ('rfid_code', '!=', False), ('state', '!=', 'rework')], limit=1)
if not workorder: if not workorder:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': '该工单不存在'} res = {'Succeed': False, 'ErrorCode': 202, 'Error': '该工单不存在'}
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)
@@ -211,7 +213,7 @@ class Manufacturing_Connect(http.Controller):
routing_type = ret['CraftId'] routing_type = ret['CraftId']
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('production_id', '=', production_id), ('routing_type', '=', routing_type), [('production_id', '=', production_id), ('routing_type', '=', routing_type),
('rfid_code', '!=', False)], limit=1) ('rfid_code', '!=', False), ('state', '!=', 'rework')], limit=1)
if not workorder: if not workorder:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': '该工单不存在'} res = {'Succeed': False, 'ErrorCode': 202, 'Error': '该工单不存在'}
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)
@@ -260,7 +262,8 @@ class Manufacturing_Connect(http.Controller):
production_id = ret['BillId'] production_id = ret['BillId']
routing_type = ret['CraftId'] routing_type = ret['CraftId']
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('production_id', '=', production_id), ('routing_type', '=', routing_type)], limit=1) [('production_id', '=', production_id), ('routing_type', '=', routing_type), ('state', '!=', 'rework')],
limit=1)
if workorder: if workorder:
# workorder.test_results = ret['Quality'] # workorder.test_results = ret['Quality']
logging.info('制造订单:%s' % workorder.production_id.name) logging.info('制造订单:%s' % workorder.production_id.name)
@@ -318,7 +321,7 @@ class Manufacturing_Connect(http.Controller):
if 'RfidCode' in ret: if 'RfidCode' in ret:
logging.info('RfidCode:%s' % ret['RfidCode']) logging.info('RfidCode:%s' % ret['RfidCode'])
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工')]) [('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工'), ('state', '!=', 'rework')])
if workorder: if workorder:
for item in workorder.cmm_ids: for item in workorder.cmm_ids:
if item.program_create_date is not False: if item.program_create_date is not False:
@@ -358,7 +361,7 @@ class Manufacturing_Connect(http.Controller):
if 'RfidCode' in ret: if 'RfidCode' in ret:
logging.info('RfidCode:%s' % ret['RfidCode']) logging.info('RfidCode:%s' % ret['RfidCode'])
workorder = request.env['mrp.workorder'].sudo().search( workorder = request.env['mrp.workorder'].sudo().search(
[('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工')]) [('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工'), ('state', '!=', 'rework')])
if workorder: if workorder:
for item in workorder.cnc_ids: for item in workorder.cnc_ids:
res['Datas'].append({ res['Datas'].append({
@@ -467,7 +470,7 @@ class Manufacturing_Connect(http.Controller):
if rfid_code is not None: if rfid_code is not None:
domain = [ domain = [
('rfid_code', '=', rfid_code), ('rfid_code', '=', rfid_code),
('routing_type', '=', 'CNC加工') ('routing_type', '=', 'CNC加工'), ('state', '!=', 'rework')
] ]
workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc') workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc')
if workorder: if workorder:
@@ -476,7 +479,7 @@ class Manufacturing_Connect(http.Controller):
logging.info( logging.info(
'工单产线状态:%s' % order.production_line_state) '工单产线状态:%s' % order.production_line_state)
panel_workorder = request.env['mrp.workorder'].sudo().search( panel_workorder = request.env['mrp.workorder'].sudo().search(
[('rfid_code', '=', rfid_code), [('rfid_code', '=', rfid_code), ('state', '!=', 'rework'),
('processing_panel', '=', order.processing_panel)]) ('processing_panel', '=', order.processing_panel)])
if panel_workorder: if panel_workorder:
panel_workorder.write({'production_line_state': '已上产线'}) panel_workorder.write({'production_line_state': '已上产线'})
@@ -528,7 +531,7 @@ class Manufacturing_Connect(http.Controller):
if rfid_code is not None: if rfid_code is not None:
domain = [ domain = [
('rfid_code', '=', rfid_code), ('rfid_code', '=', rfid_code),
('routing_type', '=', 'CNC加工') ('routing_type', '=', 'CNC加工'), ('state', '!=', 'rework')
] ]
workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc') workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc')
if workorder: if workorder:
@@ -537,7 +540,7 @@ class Manufacturing_Connect(http.Controller):
logging.info( logging.info(
'工单产线状态:%s' % order.production_line_state) '工单产线状态:%s' % order.production_line_state)
panel_workorder = request.env['mrp.workorder'].sudo().search( panel_workorder = request.env['mrp.workorder'].sudo().search(
[('rfid_code', '=', rfid_code), [('rfid_code', '=', rfid_code), ('state', '!=', 'rework'),
('processing_panel', '=', order.processing_panel)]) ('processing_panel', '=', order.processing_panel)])
if panel_workorder: if panel_workorder:
panel_workorder.write({'production_line_state': '已下产线'}) panel_workorder.write({'production_line_state': '已下产线'})

View File

@@ -868,23 +868,18 @@ class MrpProduction(models.Model):
raise UserError('编程单号为%s的CNC程序文件从FTP拉取失败' % (self.programming_no)) raise UserError('编程单号为%s的CNC程序文件从FTP拉取失败' % (self.programming_no))
productions = self.env['mrp.production'].search( productions = self.env['mrp.production'].search(
[('programming_no', '=', self.programming_no), ('state', 'not in', ('cancel', 'done'))]) [('programming_no', '=', self.programming_no), ('state', 'not in', ('cancel', 'done'))])
logging.info('get_new_program productions:%s' % productions)
if productions: if productions:
for production in productions: for production in productions:
panel_workorder = production.workorder_ids.filtered(lambda panel_workorder = production.workorder_ids.filtered(lambda
pw: pw.processing_panel == processing_panel and pw.routing_type == 'CNC加工' and pw.state not in ( pw: pw.processing_panel == processing_panel and pw.routing_type == 'CNC加工' and pw.state not in (
'rework', 'done')) 'rework', 'done'))
logging.info('get_new_program panel_workorder:%s' % panel_workorder)
if panel_workorder: if panel_workorder:
logging.info('get_new_program 1')
if panel_workorder.cmm_ids: if panel_workorder.cmm_ids:
panel_workorder.cmm_ids.sudo().unlink() panel_workorder.cmm_ids.sudo().unlink()
if panel_workorder.cnc_ids: if panel_workorder.cnc_ids:
panel_workorder.cnc_ids.sudo().unlink() panel_workorder.cnc_ids.sudo().unlink()
logging.info('get_new_program 2')
self.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan( self.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(
production) production)
logging.info('get_new_program 3')
# program_path_tmp_panel = os.path.join('C://Users//43484//Desktop//fsdownload//test', # program_path_tmp_panel = os.path.join('C://Users//43484//Desktop//fsdownload//test',
# processing_panel) # processing_panel)
logging.info('program_path_tmp_panel:%s' % program_path_tmp_panel) logging.info('program_path_tmp_panel:%s' % program_path_tmp_panel)
@@ -895,21 +890,19 @@ class MrpProduction(models.Model):
if file_extension.lower() == '.pdf': if file_extension.lower() == '.pdf':
panel_file_path = os.path.join(program_path_tmp_panel, file) panel_file_path = os.path.join(program_path_tmp_panel, file)
logging.info('panel_file_path:%s' % panel_file_path) logging.info('panel_file_path:%s' % panel_file_path)
logging.info('get_new_program 4')
panel_workorder.write( panel_workorder.write(
{'cnc_ids': panel_workorder.cnc_ids.sudo()._json_cnc_processing(processing_panel, {'cnc_ids': panel_workorder.cnc_ids.sudo()._json_cnc_processing(processing_panel,
result), result),
'cmm_ids': panel_workorder.cmm_ids.sudo()._json_cmm_program(processing_panel, result), 'cmm_ids': panel_workorder.cmm_ids.sudo()._json_cmm_program(processing_panel, result),
'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())}) 'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
logging.info('get_new_program 5')
pre_workorder = production.workorder_ids.filtered(lambda pre_workorder = production.workorder_ids.filtered(lambda
ap: ap.routing_type == '装夹预调' and ap.processing_panel == processing_panel and ap.state not in ( ap: ap.routing_type == '装夹预调' and ap.processing_panel == processing_panel and ap.state not in (
'rework', 'done')) 'rework', 'done'))
logging.info('get_new_program 6')
if pre_workorder: if pre_workorder:
pre_workorder.write( pre_workorder.write(
{'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())}) {'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
logging.info('get_new_program 7') logging.info('更新程序完成:%s' % production.name)
else: else:
raise UserError(result['message']) raise UserError(result['message'])
except Exception as e: except Exception as e:

View File

@@ -255,7 +255,7 @@ class ResMrpWorkOrder(models.Model):
sql = """ sql = """
SELECT * SELECT *
FROM mrp_workorder FROM mrp_workorder
WHERE WHERE state!='rework'
to_char(date_planned_start::timestamp + '8 hour','YYYY-MM-DD HH:mm:SS')>= %s to_char(date_planned_start::timestamp + '8 hour','YYYY-MM-DD HH:mm:SS')>= %s
AND to_char(date_planned_finished::timestamp + '8 hour','YYYY-MM-DD HH:mm:SS')<= %s AND to_char(date_planned_finished::timestamp + '8 hour','YYYY-MM-DD HH:mm:SS')<= %s
""" """
@@ -753,10 +753,15 @@ class ResMrpWorkOrder(models.Model):
('processing_panel', '=', workorder.processing_panel), ('processing_panel', '=', workorder.processing_panel),
('routing_type', '=', 'CNC加工'), ('state', 'in', ['done', 'rework']), ('routing_type', '=', 'CNC加工'), ('state', 'in', ['done', 'rework']),
('test_results', '=', '返工')]) ('test_results', '=', '返工')])
cnc_workorder_pending = self.env['mrp.workorder'].search(
[('production_id', '=', workorder.production_id.id),
('processing_panel', '=', workorder.processing_panel),
('routing_type', '=', 'CNC加工'), ('state', 'in', ['pending'])])
if workorder.state not in ['cancel', 'progress', 'rework']: if workorder.state not in ['cancel', 'progress', 'rework']:
if workorder.production_id.state == 'rework': if workorder.production_id.state == 'rework':
logging.info('len(re_work):%s' % len(re_work)) logging.info('len(re_work):%s' % len(re_work))
logging.info('len(cnc_workorder):%s' % len(cnc_workorder)) logging.info('len(cnc_workorder):%s' % len(cnc_workorder))
logging.info('len(cnc_workorder_pending):%s' % len(cnc_workorder_pending))
logging.info('工序:%s' % workorder.routing_type) logging.info('工序:%s' % workorder.routing_type)
logging.info('状态:%s' % workorder.state) logging.info('状态:%s' % workorder.state)
logging.info('is_rework:%s' % workorder.is_rework) logging.info('is_rework:%s' % workorder.is_rework)
@@ -771,7 +776,7 @@ class ResMrpWorkOrder(models.Model):
# 新工单 # 新工单
if workorder.is_rework is False: if workorder.is_rework is False:
if workorder.production_id.programming_state == '已编程' and workorder.production_id.is_rework is False: if workorder.production_id.programming_state == '已编程' and workorder.production_id.is_rework is False:
if re_work: if re_work or cnc_workorder:
workorder.state = 'ready' workorder.state = 'ready'
else: else:
if workorder.production_id.is_rework is True: if workorder.production_id.is_rework is True:
@@ -790,6 +795,7 @@ class ResMrpWorkOrder(models.Model):
workorder.state = 'waiting' workorder.state = 'waiting'
elif workorder.routing_type == '解除装夹' and workorder.state not in ['done', 'rework', 'cancel']: elif workorder.routing_type == '解除装夹' and workorder.state not in ['done', 'rework', 'cancel']:
if cnc_workorder: if cnc_workorder:
if not cnc_workorder_pending:
workorder.state = 'waiting' workorder.state = 'waiting'
# else: # else:
# if workorder.production_id.is_rework is True: # if workorder.production_id.is_rework is True:
@@ -797,6 +803,7 @@ class ResMrpWorkOrder(models.Model):
elif workorder.production_id.state == 'progress': elif workorder.production_id.state == 'progress':
logging.info('len(re_work):%s' % len(re_work)) logging.info('len(re_work):%s' % len(re_work))
logging.info('len(cnc_workorder):%s' % len(cnc_workorder)) logging.info('len(cnc_workorder):%s' % len(cnc_workorder))
logging.info('len(cnc_workorder_pending):%s' % len(cnc_workorder_pending))
logging.info('工序:%s' % workorder.routing_type) logging.info('工序:%s' % workorder.routing_type)
logging.info('状态:%s' % workorder.state) logging.info('状态:%s' % workorder.state)
logging.info('is_rework:%s' % workorder.is_rework) logging.info('is_rework:%s' % workorder.is_rework)
@@ -808,7 +815,7 @@ class ResMrpWorkOrder(models.Model):
workorder.is_rework is False and workorder.state not in [ workorder.is_rework is False and workorder.state not in [
'done', 'rework', 'done', 'rework',
'cancel']: 'cancel']:
if re_work and workorder.production_id.is_rework is False: if (re_work or cnc_workorder) and workorder.production_id.is_rework is False:
workorder.state = 'ready' workorder.state = 'ready'
if workorder.routing_type == '表面工艺' and workorder.state not in ['done', 'progress']: if workorder.routing_type == '表面工艺' and workorder.state not in ['done', 'progress']:
unclamp_workorder = self.env['mrp.workorder'].search( unclamp_workorder = self.env['mrp.workorder'].search(
@@ -817,6 +824,8 @@ class ResMrpWorkOrder(models.Model):
('state', 'in', ['done'])]) ('state', 'in', ['done'])])
if unclamp_workorder: if unclamp_workorder:
workorder.state = 'ready' workorder.state = 'ready'
logging.info('工序:%s' % workorder.sequence)
logging.info('工单最终状态:%s' % workorder.state)
# else: # else:
# if workorder.state not in ['cancel', 'rework']: # if workorder.state not in ['cancel', 'rework']:
# workorder.state = 'rework' # workorder.state = 'rework'