修改创建调度任务逻辑,不匹配的路线返回错误信息

This commit is contained in:
胡尧
2024-08-16 16:49:30 +08:00
parent c4de966dea
commit a6b7167f3b
2 changed files with 12 additions and 25 deletions

View File

@@ -489,24 +489,9 @@ class Manufacturing_Connect(http.Controller):
res = {'Succeed': False, 'ErrorCode': 204, res = {'Succeed': False, 'ErrorCode': 204,
'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']} 'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']}
if ret['IsComplete'] is True: if ret['IsComplete'] is True:
# 将RFID_CODE对应的工件配送单对应的AGV任务调度状态设置为已配送
# workorder_id = request.env['mrp.workorder'].sudo().search([
# ('rfid_code', 'in', rfid_codes),
# ('routing_type', '=', '装夹预调'), ('state', '!=', 'rework')
# ])
# workorder_id.agv_scheduling_ids.finish_scheduling()
# 将工件配送单状态设置为已配送
request.env['sf.workpiece.delivery'].sudo().search([
('rfid_code', 'in', rfid_codes),
('type', '=', '上产线'),
('status', '=', '已下发')
]).write({'state': '已配送'})
# 向AGV任务调度下发运送空料架任务 # 向AGV任务调度下发运送空料架任务
# 获取设备ID对应的接驳站配置
agv_site = request.env['sf.agv.site'].sudo().search(
[('name', '=', ret['DeviceId'])], limit=1)
workorders = request.env['mrp.workorder'].browse(workorder_ids) workorders = request.env['mrp.workorder'].browse(workorder_ids)
request.env['sf.agv.scheduling'].add_scheduling(agv_site.id, '运送空料架', workorders) request.env['sf.agv.scheduling'].add_scheduling(ret['DeviceId'], '运送空料架', workorders)
else: else:
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'} res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'}
else: else:
@@ -591,17 +576,14 @@ class Manufacturing_Connect(http.Controller):
# logging.info('agv下发下产线任务下发完成') # logging.info('agv下发下产线任务下发完成')
if ret['IsComplete'] is True: if ret['IsComplete'] is True:
# 向AGV任务调度下发下产线任务 # 向AGV任务调度下发下产线任务
# 获取设备ID对应的接驳站配置
agv_site = request.env['sf.agv.site'].sudo().search(
[('name', '=', ret['DeviceId'])], limit=1)
workorders = request.env['mrp.workorder'].browse(workorder_ids) workorders = request.env['mrp.workorder'].browse(workorder_ids)
request.env['sf.agv.scheduling'].add_scheduling(agv_site.id, '下产线', workorders) request.env['sf.agv.scheduling'].add_scheduling(ret['DeviceId'], '下产线', workorders)
else: else:
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'} res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'}
except RepeatTaskException as e: except RepeatTaskException as e:
logging.info('AGVToProduct error:%s' % e) logging.info('AGVToProduct error:%s' % e)
except Exception as e: except Exception as e:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e} res = {'Succeed': False, 'ErrorCode': 202, 'Error': str(e)}
logging.info('AGVDownProduct error:%s' % e) logging.info('AGVDownProduct error:%s' % e)
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)

View File

@@ -65,16 +65,19 @@ class AgvScheduling(models.Model):
vals['name'] = self.env['ir.sequence'].next_by_code('sf.agv.scheduling') or _('New') vals['name'] = self.env['ir.sequence'].next_by_code('sf.agv.scheduling') or _('New')
return super().create(vals_list) return super().create(vals_list)
def add_scheduling(self, agv_start_site_id, agv_route_type, workorders): def add_scheduling(self, agv_start_site_name, agv_route_type, workorders):
""" add_scheduling(agv_start_site_id, agv_route_type, workorders) -> agv_scheduling """ add_scheduling(agv_start_site_id, agv_route_type, workorders) -> agv_scheduling
新增AGV调度 新增AGV调度
params: params:
agv_start_site_id: AGV起点接驳站ID agv_start_site_name: AGV起点接驳站名称
agv_route_type: AGV任务类型 agv_route_type: AGV任务类型
workorders: 工单 workorders: 工单
""" """
if not workorders: if not workorders:
raise UserError(_('工单不能为空')) raise UserError(_('工单不能为空'))
agv_start_site = self.env['sf.agv.site'].sudo().search([('name', '=', agv_start_site_name)], limit=1)
if not agv_start_site:
raise UserError(_('不存在名称为【%s】的接驳站,请先创建!' % agv_start_site_name))
# 如果存在相同任务类型工单的AGV调度任务则提示错误 # 如果存在相同任务类型工单的AGV调度任务则提示错误
agv_scheduling = self.sudo().search([ agv_scheduling = self.sudo().search([
('workorder_ids', 'in', workorders.ids), ('workorder_ids', 'in', workorders.ids),
@@ -90,7 +93,7 @@ class AgvScheduling(models.Model):
) )
vals = { vals = {
'start_site_id': agv_start_site_id, 'start_site_id': agv_start_site.id,
'agv_route_type': agv_route_type, 'agv_route_type': agv_route_type,
'workorder_ids': workorders.ids, 'workorder_ids': workorders.ids,
# 'workpiece_delivery_ids': deliveries.mapped('id') if deliveries else [], # 'workpiece_delivery_ids': deliveries.mapped('id') if deliveries else [],
@@ -99,8 +102,10 @@ class AgvScheduling(models.Model):
# 如果只有唯一任务路线,则自动赋予终点接驳站跟任务名称 # 如果只有唯一任务路线,则自动赋予终点接驳站跟任务名称
agv_routes = self.env['sf.agv.task.route'].sudo().search([ agv_routes = self.env['sf.agv.task.route'].sudo().search([
('route_type', '=', agv_route_type), ('route_type', '=', agv_route_type),
('start_site_id', '=', agv_start_site_id) ('start_site_id', '=', agv_start_site.id)
]) ])
if not agv_routes:
raise UserError(_('不存在起点为【%s】的【%s】任务路线,请先创建!' % (agv_start_site_name, agv_route_type)))
idle_route = None idle_route = None
if len(agv_routes) == 1: if len(agv_routes) == 1:
idle_route = agv_routes[0] idle_route = agv_routes[0]