From 231536089de19bae8087efc503dd4c92799a033f Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 24 Apr 2024 14:20:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BB=B6=E8=A3=85=E5=A4=B9=E5=B2=97?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=89=98=E7=9B=98RFID=EF=BC=8C=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=A0=A1=E9=AA=8C=E5=B9=B6=E5=B8=A6=E5=87=BA=E3=80=90?= =?UTF-8?q?=E5=90=8C=E8=BF=90=E5=B7=A5=E4=BB=B6=E3=80=91=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E8=87=AA=E5=8A=A8=E6=A0=A1=E9=AA=8C=E3=80=90?= =?UTF-8?q?=E7=9B=AE=E7=9A=84=E7=94=9F=E4=BA=A7=E7=BA=BF=E3=80=91=E4=B8=80?= =?UTF-8?q?=E8=87=B4=20=E3=80=90=E5=90=8C=E8=BF=90=E5=B7=A5=E4=BB=B6?= =?UTF-8?q?=E3=80=91=E6=A0=A1=E9=AA=8C=E7=9B=AE=E7=9A=84=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E7=BA=BF=E4=B8=8D=E4=B8=80=E8=87=B4=EF=BC=8C=E5=88=99=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=8F=90=E7=A4=BA=EF=BC=9A=E5=B7=A5=E4=BB=B6=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E7=BA=BF=E4=B8=8D=E4=B8=80=E8=87=B4=EF=BC=8C=E8=AF=B7?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=A1=AE=E8=AE=A4=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/controllers/controllers.py | 4 +- sf_manufacturing/controllers/workpiece.py | 9 +-- sf_manufacturing/models/mrp_workorder.py | 69 ++++++++----------- sf_manufacturing/views/mrp_workorder_view.xml | 7 +- 4 files changed, 35 insertions(+), 54 deletions(-) diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index 28f0702c..42efa95b 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -431,7 +431,7 @@ class Manufacturing_Connect(http.Controller): if 'DeviceId' in ret: logging.info('DeviceId:%s' % ret['DeviceId']) workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( - [('feeder_station_start_id.name', '=', ret['DeviceId']), + [('feeder_station_destination_id.name', '=', ret['DeviceId']), ('status', '=', '已配送'), ('type', '=', '上产线')], order='id asc') if workpiece_delivery: for wd in workpiece_delivery: @@ -466,7 +466,7 @@ class Manufacturing_Connect(http.Controller): if 'DeviceId' in ret: logging.info('DeviceId:%s' % ret['DeviceId']) workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( - [('feeder_station_start_id.name', '=', ret['DeviceId']), + [('feeder_station_destination_id.name', '=', ret['DeviceId']), ('status', '=', '已配送'), ('type', '=', '下产线')], order='id asc') if workpiece_delivery: for wd in workpiece_delivery: diff --git a/sf_manufacturing/controllers/workpiece.py b/sf_manufacturing/controllers/workpiece.py index b204cbc7..04a4bbab 100644 --- a/sf_manufacturing/controllers/workpiece.py +++ b/sf_manufacturing/controllers/workpiece.py @@ -26,15 +26,10 @@ class Workpiece(http.Controller): if ret['method'] == 'end': logging.info('backfeed-ret:%s' % ret['reqCode'].rsplit('-', 1)[0]) workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( - [('production_id.name', '=', ret['reqCode'].rsplit('-', 1)[0]), ('agv_task_code'), '=', - ret['taskCode']]) + [('production_id.name', '=', ret['reqCode'].rsplit('-', 1)[0]), ('delivery_num', '=', + ret['reqCode'])]) if workpiece_delivery: workpiece_delivery.write({'status': '已配送', 'task_completion_time': ret['reqTime']}) - if workpiece_delivery.type == '下产线': - workpiece_delivery_clear = request.env['sf.workpiece.delivery'].sudo().search( - [('production_id.name', '=', ret['reqCode']), ('type', '=', '运送空料架')]) - if workpiece_delivery_clear: - workpiece_delivery_clear._delivery_avg() else: res = {'Succeed': False, 'ErrorCode': 203, 'Error': '该reqCode暂未查到对应的工件配送记录'} else: diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index bc1c9379..0a1bbdac 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -808,7 +808,7 @@ class ResMrpWorkOrder(models.Model): # 根据中控系统提供的检测文件地址去ftp里对应的制造订单里获取 def get_detection_file(self, workorder, reportPath): if reportPath.startswith('/'): - reportPath = reportPath[1:] + reportPath = reportPath[4:] serverdir = os.path.join('/tmp', reportPath) logging.info('get_detection_file-serverdir:%s' % serverdir) serverdir_prefix = os.path.dirname(serverdir) @@ -959,16 +959,26 @@ class SfWorkOrderBarcodes(models.Model): def on_barcode_scanned(self, barcode): workorder = self.env['mrp.workorder'].browse(self.ids) - # workorder = self.env['mrp.workorder'].search( - # [('routing_type', '=', '装夹预调'), ('production_id', '=', self.production_id.id)]) - workorder_old = self.env['mrp.workorder'].search([('rfid_code', '=', barcode)]) - if workorder_old: - raise UserError('该托盘已绑定【%s】制造订单,请先解除绑定!!!' % workorder_old.production_id.name) + workorder_preset = self.env['mrp.workorder'].search( + [('routing_type', '=', '装夹预调'), ('rfid_code', '=', barcode)]) + # workorder_old = self.env['mrp.workorder'].search([('rfid_code', '=', barcode)]) + if len(workorder_preset) <= 4: + workpiece_ids = [] + for item in workorder_preset: + if item.production_line_id.id == workorder.production_line_id.id: + workpiece_ids.append(item.production_id.id) + else: + raise UserError('工件生产线不一致,请重新确认') + if workpiece_ids: + workorder.workpiece_delivery_ids.write({'sametransport_production_ids': [(6, 0, workpiece_ids)]}) + + # raise UserError('该托盘已绑定【%s】制造订单,请先解除绑定!!!' % workorder_old.production_id.name) if workorder: if workorder.routing_type == '装夹预调': if workorder.state in ['done']: work_state = {'done': '已完工'} raise UserError('装夹%s,请勿重复扫码' % work_state.get(workorder.state)) + lots = self.env['stock.lot'].sudo().search([('rfid', '=', barcode)]) logging.info("托盘信息:%s" % lots) if lots: @@ -991,38 +1001,6 @@ class SfWorkOrderBarcodes(models.Model): item.write({'rfid_code': barcode}) logging.info("Rfid绑定成功!!!") else: - embryo_stock_lot = self.env['stock.lot'].search([('name', '=', barcode)]) - if embryo_stock_lot: - embryo_stock_move_line = self.env['stock.move.line'].search( - [('product_id', '=', embryo_stock_lot.product_id.id), - ('reference', '=', workorder.production_id.name), - ('lot_id', '=', embryo_stock_lot.id), - ('product_category_name', '=', '坯料')]) - if embryo_stock_move_line: - bom_production = self.env['mrp.production'].search( - [('product_id', '=', embryo_stock_lot.product_id.id), - ('origin', '=', workorder.production_id.name)], limit=1, order='id asc') - workpiece_delivery = self.env['sf.workpiece.delivery'].search( - [('workorder_id', '=', workorder.id)], limit=1, order='id asc') - if workpiece_delivery: - embryo_workpiece_code = workpiece_delivery.workpiece_code - if bom_production: - if workpiece_delivery.workpiece_code and bom_production.name not in \ - workpiece_delivery.workpiece_code: - embryo_workpiece_code = workpiece_delivery.workpiece_code + ',' + \ - bom_production.name - if not workpiece_delivery.workpiece_code: - embryo_workpiece_code = bom_production.name - workpiece_delivery.write({'workpiece_code': embryo_workpiece_code}) - else: - raise UserError('工件生产线不一致,请重新确认') - else: - workorder_rfid = self.env['mrp.workorder'].search( - [('production_id', '=', workorder.production_id.id)]) - if workorder_rfid: - for item in workorder_rfid: - if item.state == "progress": - item.write({'rfid_code': barcode}) raise UserError('该托盘信息不存在!!!') # stock_move_line = self.env['stock.move.line'].search([('lot_name', '=', barcode)]) # if stock_move_line.product_id.categ_type == '夹具': @@ -1086,7 +1064,8 @@ class WorkPieceDelivery(models.Model): string='目的生产线', readonly=True, store=True) plan_start_processing_time = fields.Datetime('计划开始加工时间', readonly=True) - workpiece_code = fields.Char('同运工件编码') + sametransport_production_ids = fields.Many2many('mrp.production', 'rel_workpiece_production', string='同运工件编码') + route_id = fields.Many2one('sf.agv.task.route', '任务路线') feeder_station_start_id = fields.Many2one('sf.agv.site', '起点接驳站') feeder_station_destination_id = fields.Many2one('sf.agv.site', '目的接驳站') @@ -1103,7 +1082,6 @@ class WorkPieceDelivery(models.Model): string='上/下产线', default='待上产线') cnc_program_down_state = fields.Selection([('待下发', '待下发'), ('已下发', '已下发')], string='CNC程序下发状态', default='待下发') - agv_task_code = fields.Char('agv任务单号') @api.onchange('route_id') def onchage_route(self): @@ -1164,9 +1142,16 @@ class WorkPieceDelivery(models.Model): ret = ret.json() logging.info('config-ret:%s' % ret) if ret['code'] == 0: - if self.production_id.name == ret['reqCode']: + if self.delivery_num == ret['reqCode']: + if self.sametransport_production_ids: + for item in self.sametransport_production_ids: + sametransport_workpiece = self.search( + [('production_id', '=', item.id), ('type', '=', '上产线')]) + if sametransport_workpiece: + sametransport_workpiece.write( + {'task_delivery_time': fields.Datetime.now(), 'status': '待配送'}) self.write( - {'task_delivery_time': fields.Datetime.now(), 'status': '待配送', 'agv_task_code': ret['data']}) + {'task_delivery_time': fields.Datetime.now(), 'status': '待配送'}) else: raise UserError(ret['message']) except Exception as e: diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 0cc541e7..06dcd5bd 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -424,7 +424,7 @@ - + @@ -568,7 +568,8 @@ decoration-warning="status == '待下发'" decoration-danger="status == '待配送'"/> - + + @@ -587,7 +588,7 @@ - +