diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py
index 0a1f4cb6..6ef8a38e 100644
--- a/sf_manufacturing/controllers/controllers.py
+++ b/sf_manufacturing/controllers/controllers.py
@@ -166,11 +166,13 @@ class Manufacturing_Connect(http.Controller):
if not workorder:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': '该工单不存在'}
return json.JSONEncoder().encode(res)
+ logging.info('workorder_state:%s' % workorder.state)
if workorder.state != 'ready':
res = {'Succeed': False, 'ErrorCode': 202, 'Error': '工单未就绪'}
return json.JSONEncoder().encode(res)
work_equipment_id = request.env['maintenance.equipment'].sudo().search([('name', '=', equipment_id)],
limit=1)
+ logging.info('work_equipment_id:%s' % work_equipment_id.name)
if not work_equipment_id:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': '没有找到该加工设备'}
return json.JSONEncoder().encode(res)
@@ -457,19 +459,21 @@ class Manufacturing_Connect(http.Controller):
rfid_code = ret[f'RfidCode{i}']
logging.info('RfidCode:%s' % rfid_code)
domain = [
- ('feeder_station_destination_id.name', '=', ret['DeviceId']),
- ('workorder_id.rfid_code', '=', rfid_code),
- ('status', '=', '已配送'),
- ('type', '=', '上产线')
+ ('rfid_code', '=', rfid_code),
+ ('routing_type', '=', 'CNC加工')
]
- workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(domain,
- order='id asc')
- if workpiece_delivery:
- for wd in workpiece_delivery:
- if wd.workorder_id.state == 'done' and wd.production_id.production_line_state == '待上产线':
+ workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc')
+ if workorder:
+ for order in workorder:
+ if order.production_id.production_line_state == '待上产线':
logging.info(
- 'wd.production_line_state:%s' % wd.production_id.production_line_state)
- wd.production_id.write({'production_line_state': '已上产线'})
+ '制造订单产线状态:%s' % order.production_id.production_line_state)
+ order.production_id.write({'production_line_state': '已上产线'})
+ workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search([
+ ('rfid_code', '=', rfid_code),
+ ('production_id', '=', order.production_id.id)])
+ if workpiece_delivery.status == '待下发':
+ workpiece_delivery.write({'is_manual_work': True})
else:
res = {'Succeed': False, 'ErrorCode': 204,
'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']}
@@ -510,19 +514,20 @@ class Manufacturing_Connect(http.Controller):
rfid_code = ret[f'RfidCode{i}']
logging.info('RfidCode:%s' % rfid_code)
domain = [
- ('workorder_id.rfid_code', '=', rfid_code),
- ('status', '=', '待下发'),
- ('type', '=', '下产线')
+ ('rfid_code', '=', rfid_code),
+ ('routing_type', '=', 'CNC加工')
]
- workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(domain,
- order='id asc')
- if workpiece_delivery:
- for wd in workpiece_delivery:
- if wd.workorder_id.state == 'done' and wd.production_id.production_line_state == '已上产线':
+ workorder = request.env['mrp.workorder'].sudo().search(domain, order='id asc')
+ if workorder:
+ for order in workorder:
+ if order.production_id.production_line_state == '已上产线':
logging.info(
- 'wd.production_line_state:%s' % wd.production_id.production_line_state)
- wd.production_id.write({'production_line_state': '已下产线'})
- delivery_Arr.append(wd.id)
+ '制造订单产线状态:%s' % order.production_id.production_line_state)
+ order.production_id.write({'production_line_state': '已下产线'})
+ workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search([
+ ('rfid_code', '=', rfid_code),
+ ('production_id', '=', order.production_id.id)])
+ delivery_Arr.append(workpiece_delivery.id)
else:
res = {'Succeed': False, 'ErrorCode': 204,
'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']}
@@ -532,10 +537,14 @@ class Manufacturing_Connect(http.Controller):
[('id', 'in', delivery_Arr)])
if delivery_workpiece:
logging.info('开始向agv下发下产线任务')
- is_free = delivery_workpiece._check_avgsite_state()
- if is_free is True:
- delivery_workpiece._delivery_avg()
- logging.info('agv下发下产线任务下发完成')
+ agv_site = request.env['sf.agv.site'].sudo().search([])
+ if agv_site:
+ has_site = agv_site.update_site_state()
+ if has_site is True:
+ is_free = delivery_workpiece._check_avgsite_state()
+ if is_free is True:
+ delivery_workpiece._delivery_avg()
+ logging.info('agv下发下产线任务下发完成')
else:
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'}
except Exception as e:
diff --git a/sf_manufacturing/models/agv_setting.py b/sf_manufacturing/models/agv_setting.py
index a6724e25..a0a14d3d 100644
--- a/sf_manufacturing/models/agv_setting.py
+++ b/sf_manufacturing/models/agv_setting.py
@@ -26,20 +26,28 @@ class AgvSetting(models.Model):
timestamp = int(time.time())
center_control_url += str(timestamp)
logging.info('工件配送-请求中控地址:%s' % center_control_url)
- center_control_r = requests.get(center_control_url, params={}, headers=headers)
- ret = center_control_r.json()
- logging.info('工件配送-请求中控站点信息:%s' % ret)
- self.env['center_control.interface.log'].sudo().create(
- {'content': ret, 'name': 'AutoDeviceApi/GetAgvStationState?date=%s' % str(timestamp)})
- if ret['Succeed'] is True:
- datas = ret['Datas']
- for item in self:
- for da in datas:
- if da['DeviceId'] == item.name:
- if da['AtHome'] is True:
- item.state = '占用'
- else:
- item.state = '空闲'
+ try:
+ center_control_r = requests.get(center_control_url, headers=headers, timeout=60) # 设置超时为60秒
+ ret = center_control_r.json()
+ logging.info('工件配送-请求中控站点信息:%s' % ret)
+ self.env['center_control.interface.log'].sudo().create(
+ {'content': ret, 'name': 'AutoDeviceApi/GetAgvStationState?date=%s' % str(timestamp)})
+ if ret['Succeed'] is True:
+ datas = ret['Datas']
+ for item in self:
+ for da in datas:
+ if da['DeviceId'] == item.name:
+ if da['AtHome'] is True:
+ item.state = '占用'
+ else:
+ item.state = '空闲'
+ return True
+ except requests.exceptions.Timeout:
+ logging.error('工件配送-请求中控接口超时')
+ return False
+ except requests.exceptions.RequestException as e:
+ logging.error('工件配送-请求中控接口错误: %s', e)
+ return False
class AgvTaskRoute(models.Model):
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index fd93eb4d..07c5e44a 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -159,7 +159,7 @@ class ResMrpWorkOrder(models.Model):
('已完工', '已完工'),
], string='工序状态', default='待装夹', readonly='True')
# 加工图纸
- processing_drawing = fields.Binary(string='加工图纸', related='production_id.part_drawing')
+ processing_drawing = fields.Binary(string='加工图纸')
@api.depends('production_id')
def _compute_save_name(self):
@@ -1326,6 +1326,7 @@ class WorkPieceDelivery(models.Model):
status = fields.Selection(
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', default='待下发')
is_cnc_program_down = fields.Boolean('程序是否下发', default=False)
+ is_manual_work = fields.Boolean('人工操作', default=False)
active = fields.Boolean(string="有效", default=True)
@api.model
@@ -1393,6 +1394,8 @@ class WorkPieceDelivery(models.Model):
is_not_route += 1
# else:
# raise UserError('请选择【任务路线】再进行配送')
+ # if item.production_id.production_line_state == '已下产线' and item.state == '待下发' and item.type == '下产线':
+ # raise UserError('该制造订单已下产线,无需配送')
if production_type != item.type:
raise UserError('请选择类型为%s的制造订单进行配送' % production_type)
if down_status != item.status:
@@ -1446,22 +1449,25 @@ class WorkPieceDelivery(models.Model):
is_free = False
agv_site = self.env['sf.agv.site'].search([])
if agv_site:
- agv_site.update_site_state()
- for item in self:
- logging.info('工件配送-起点状态:%s-%s' % (
- item.feeder_station_start_id.name, item.feeder_station_start_id.state))
- logging.info('工件配送-终点状态:%s-%s' % (
- item.feeder_station_destination_id.name, item.feeder_station_destination_id.state))
- if item.type in ['上产线', '下产线']:
- if (
- item.feeder_station_start_id.state == '占用' and item.feeder_station_destination_id.state == '空闲') or (
- item.feeder_station_start_id.state == '空闲' and item.feeder_station_destination_id.state == '空闲'):
- is_free = True
+ has_site = agv_site.update_site_state()
+ if has_site is True:
+ for item in self:
+ if item.type in ['上产线', '下产线']:
+ logging.info('工件配送-起点状态:%s-%s' % (
+ item.feeder_station_start_id.name, item.feeder_station_start_id.state))
+ logging.info('工件配送-终点状态:%s-%s' % (
+ item.feeder_station_destination_id.name, item.feeder_station_destination_id.state))
+ if (
+ item.feeder_station_start_id.state == '占用' and item.feeder_station_destination_id.state == '空闲') or (
+ item.feeder_station_start_id.state == '空闲' and item.feeder_station_destination_id.state == '空闲'):
+ is_free = True
+ else:
+ if item.feeder_station_destination_id.state == '空闲':
+ is_free = True
+ logging.info('is_free:%s' % is_free)
+ return is_free
else:
- if item.feeder_station_destination_id.state == '空闲':
- is_free = True
- logging.info('is_free:%s' % is_free)
- return is_free
+ raise UserError("接驳站暂未反馈站点实时状态,请稍后再试")
# 配送至avg小车
def _delivery_avg(self):
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 85e3e5ed..a34dc4cf 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -658,7 +658,9 @@
{'search_default_on_up':1}
tree,search
- [('type','in',['上产线','下产线']),('workorder_state','=','done')]
+
+ [('type','in',['上产线','下产线']),('workorder_state','=','done'),('is_manual_work','=',false)]
+
@@ -677,7 +679,7 @@
attrs="{'readonly': [('id', '!=', False)]}" domain="[('route_type', '=', '运送空料架')]"
force_save="1"/>
-
+
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index 08d6d9b4..7498ec75 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -67,6 +67,9 @@ class Sf_Mrs_Connect(http.Controller):
logging.info('cnc_processing_arr:%s' % cnc_processing_arr)
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(
+ {'processing_drawing': cnc_production.workorder_ids.filtered(
+ lambda b1: b1.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})