diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index f9836616..84ee9f46 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -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) diff --git a/sf_manufacturing/models/agv_scheduling.py b/sf_manufacturing/models/agv_scheduling.py index f634154b..1a448146 100644 --- a/sf_manufacturing/models/agv_scheduling.py +++ b/sf_manufacturing/models/agv_scheduling.py @@ -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] diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 05812f44..847e1a37 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -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 diff --git a/sf_manufacturing/wizard/workpiece_delivery_wizard.py b/sf_manufacturing/wizard/workpiece_delivery_wizard.py index b9d55cca..be470b67 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_wizard.py +++ b/sf_manufacturing/wizard/workpiece_delivery_wizard.py @@ -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, )