From 2ab9f370628f9f11d4c2646d68ea7099ac7b7f5a Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Mon, 3 Jun 2024 16:59:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=B7=A5=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E9=80=812.=E4=BC=98=E5=8C=96=E8=BF=90=E9=80=81=E7=A9=BA?= =?UTF-8?q?=E6=96=99=E6=9E=B6.3.cloud=E4=B8=8B=E5=8F=91=E7=BC=96=E7=A8=8B?= =?UTF-8?q?=E5=8D=95=E8=87=B3sf=E6=97=B6=EF=BC=8C=E5=B0=86=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=8D=95pdf=E5=90=8C=E6=AD=A5=E8=87=B3=E5=88=B6?= =?UTF-8?q?=E9=80=A0=E8=AE=A2=E5=8D=95=E7=9A=84=E8=A3=85=E5=A4=B9=E9=A2=84?= =?UTF-8?q?=E8=B0=83=E5=B7=A5=E5=8D=95=E7=9A=84=E5=8A=A0=E5=B7=A5=E5=9B=BE?= =?UTF-8?q?=E7=BA=B8=E4=B8=8A4.=E4=BF=AE=E5=A4=8D=E5=B7=A5=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E4=BA=A7=E7=BA=BF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/agv_setting.py | 36 ++++++++------ sf_manufacturing/models/mrp_workorder.py | 47 ++++++++++++------- sf_manufacturing/views/mrp_workorder_view.xml | 18 ++++--- sf_mrs_connect/controllers/controllers.py | 3 ++ 4 files changed, 68 insertions(+), 36 deletions(-) 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 0f37c8f0..d8e6fe02 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): @@ -1229,15 +1229,25 @@ 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 def create(self, vals): if vals.get('name', '/') == '/' or vals.get('name', '/') is False: vals['name'] = self.env['ir.sequence'].next_by_code('sf.workpiece.delivery') or '/' + else: + vals['type'] = '运送空料架' obj = super(WorkPieceDelivery, self).create(vals) return obj + @api.constrains('name') + def _check_name(self): + if self.type == '运送空料架': + wd = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id)]) + if wd: + raise UserError("该名称已存在") + def action_delivery_history(self): return { 'name': _('配送历史'), @@ -1287,6 +1297,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: @@ -1340,22 +1352,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 94f469ea..bc1d4bfe 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -659,7 +659,9 @@ {'search_default_on_up':1} tree,search - [('type','in',['上产线','下产线']),('workorder_state','=','done')] + + [('type','in',['上产线','下产线']),('workorder_state','=','done'),('is_manual_work','=',false)] + @@ -668,14 +670,18 @@ 空料架配送 sf.workpiece.delivery - +
- - - - + + + + +