Accept Merge Request #1221: (feature/agv_dispatch -> develop)
Merge Request: 装夹工单完成后生成工件配送单同时绑定rfid Created By: @胡尧 Reviewed By: @马广威 Approved By: @马广威 Accepted By: @胡尧 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1221
This commit is contained in:
@@ -489,24 +489,9 @@ class Manufacturing_Connect(http.Controller):
|
||||
res = {'Succeed': False, 'ErrorCode': 204,
|
||||
'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']}
|
||||
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任务调度下发运送空料架任务
|
||||
# 获取设备ID对应的接驳站配置
|
||||
agv_site = request.env['sf.agv.site'].sudo().search(
|
||||
[('name', '=', ret['DeviceId'])], limit=1)
|
||||
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:
|
||||
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'}
|
||||
else:
|
||||
@@ -591,17 +576,14 @@ class Manufacturing_Connect(http.Controller):
|
||||
# logging.info('agv下发下产线任务下发完成')
|
||||
if ret['IsComplete'] is True:
|
||||
# 向AGV任务调度下发下产线任务
|
||||
# 获取设备ID对应的接驳站配置
|
||||
agv_site = request.env['sf.agv.site'].sudo().search(
|
||||
[('name', '=', ret['DeviceId'])], limit=1)
|
||||
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:
|
||||
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '未传IsComplete字段'}
|
||||
except RepeatTaskException as e:
|
||||
logging.info('AGVToProduct error:%s' % 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)
|
||||
return json.JSONEncoder().encode(res)
|
||||
|
||||
|
||||
@@ -65,16 +65,19 @@ class AgvScheduling(models.Model):
|
||||
vals['name'] = self.env['ir.sequence'].next_by_code('sf.agv.scheduling') or _('New')
|
||||
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
|
||||
新增AGV调度
|
||||
params:
|
||||
agv_start_site_id: AGV起点接驳站ID
|
||||
agv_start_site_name: AGV起点接驳站名称
|
||||
agv_route_type: AGV任务类型
|
||||
workorders: 工单
|
||||
"""
|
||||
if not workorders:
|
||||
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_scheduling = self.sudo().search([
|
||||
('workorder_ids', 'in', workorders.ids),
|
||||
@@ -90,7 +93,7 @@ class AgvScheduling(models.Model):
|
||||
)
|
||||
|
||||
vals = {
|
||||
'start_site_id': agv_start_site_id,
|
||||
'start_site_id': agv_start_site.id,
|
||||
'agv_route_type': agv_route_type,
|
||||
'workorder_ids': workorders.ids,
|
||||
# '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([
|
||||
('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
|
||||
if len(agv_routes) == 1:
|
||||
idle_route = agv_routes[0]
|
||||
|
||||
@@ -703,7 +703,8 @@ class ResMrpWorkOrder(models.Model):
|
||||
'production_id': self.production_id.id,
|
||||
'production_line_id': self.production_id.production_line_id.id,
|
||||
'type': '上产线',
|
||||
'is_cnc_program_down': True
|
||||
'is_cnc_program_down': True,
|
||||
'rfid_code': self.rfid_code
|
||||
# 'route_id': up_route.id,
|
||||
# 'feeder_station_start_id': agv_start_site_id,
|
||||
# 'feeder_station_destination_id': up_route.end_site_id.id
|
||||
|
||||
@@ -71,7 +71,7 @@ class WorkpieceDeliveryWizard(models.TransientModel):
|
||||
# raise UserError('制造订单号为%s的目的生产线不一致' % notsame_production_line_str)
|
||||
# else:
|
||||
scheduling = self.env['sf.agv.scheduling'].add_scheduling(
|
||||
agv_start_site_id=self.feeder_station_start_id.id,
|
||||
agv_start_site_name=self.feeder_station_start_id.name,
|
||||
agv_route_type=self.delivery_type,
|
||||
workorders=self.workorder_ids,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user