修复中控对接接口
This commit is contained in:
@@ -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': '已下产线'})
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,13 +795,15 @@ 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:
|
||||||
workorder.state = 'waiting'
|
if not cnc_workorder_pending:
|
||||||
|
workorder.state = 'waiting'
|
||||||
# else:
|
# else:
|
||||||
# if workorder.production_id.is_rework is True:
|
# if workorder.production_id.is_rework is True:
|
||||||
# workorder.state = 'waiting'
|
# workorder.state = 'waiting'
|
||||||
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,9 +824,11 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
('state', 'in', ['done'])])
|
('state', 'in', ['done'])])
|
||||||
if unclamp_workorder:
|
if unclamp_workorder:
|
||||||
workorder.state = 'ready'
|
workorder.state = 'ready'
|
||||||
# else:
|
logging.info('工序:%s' % workorder.sequence)
|
||||||
# if workorder.state not in ['cancel', 'rework']:
|
logging.info('工单最终状态:%s' % workorder.state)
|
||||||
# workorder.state = 'rework'
|
# else:
|
||||||
|
# if workorder.state not in ['cancel', 'rework']:
|
||||||
|
# workorder.state = 'rework'
|
||||||
# elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress',
|
# elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress',
|
||||||
# 'rework']:
|
# 'rework']:
|
||||||
# per_work = self.env['mrp.workorder'].search(
|
# per_work = self.env['mrp.workorder'].search(
|
||||||
|
|||||||
Reference in New Issue
Block a user