diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index e0e2a22c..23be7d38 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -436,6 +436,7 @@ class Manufacturing_Connect(http.Controller): DeciveId))) total_data = request.env['sf.shelf.location.datasync'].sudo().get_total_data() for item in shelfinfo: + logging.info('货架已获取信息:%s' % item) shelf_barcode = request.env['sf.shelf.location.datasync'].sudo().find_our_code( total_data, item['Postion']) location_id = request.env['sf.shelf.location'].sudo().search( @@ -450,15 +451,15 @@ class Manufacturing_Connect(http.Controller): if tool: location_id.product_sn_id = tool.barcode_id.id # 修改功能刀具状态 - tool_state = {'Nomal': '正常', 'Warning': '报警'} - if tool_state.get(item.get('State')): - if tool_state.get(item.get('State')) != tool.functional_tool_status: + if item.get('State') == '报警': + if tool.functional_tool_status != item.get('State'): tool.write({ - 'functional_tool_status': tool_state.get(item['State']) + 'functional_tool_status': item['State'] }) else: location_id.product_sn_id = False - logging.info('货架已获取信息:%s' % item) + if item['RfidCode']: + logging.info('Rfid为【%s】的功能刀具在系统中不存在!' % item['RfidCode']) else: equipment_id = request.env['maintenance.equipment'].sudo().search([('name', '=', DeciveId)]) if equipment_id: @@ -683,9 +684,14 @@ class Manufacturing_Connect(http.Controller): request.env['center_control.interface.log'].sudo().create( {'content': ret, 'name': 'AutoDeviceApi/AGVStationState'}) logging.info('ret:%s' % ret) - if 'DeviceId' in ret and 'AtHome' in ret: - logging.info('DeviceId:%s, AtHome:%s' % (ret['DeviceId'], ret['AtHome'])) - request.env['sf.agv.site'].update_site_state({ret['DeviceId']: '占用' if ret['AtHome'] else '空闲'}) + ret = ret['param'] + params = {} + for i in range(len(ret)): + if 'DeviceId' in ret[i] and 'AtHome' in ret[i]: + logging.info('DeviceId:%s, AtHome:%s' % (ret[i]['DeviceId'], ret[i]['AtHome'])) + params[ret[i]['DeviceId']] = '占用' if ret[i]['AtHome'] else '空闲' + if params: + request.env['sf.agv.site'].update_site_state(params) except Exception as e: res = {'Succeed': False, 'ErrorCode': 202, 'Error': str(e)} logging.info('AGVDownProduct error:%s' % e) diff --git a/sf_manufacturing/models/agv_scheduling.py b/sf_manufacturing/models/agv_scheduling.py index f2ac517b..237038ba 100644 --- a/sf_manufacturing/models/agv_scheduling.py +++ b/sf_manufacturing/models/agv_scheduling.py @@ -226,12 +226,12 @@ class AgvScheduling(models.Model): if rec.state != '待下发': return False _logger.info('AGV任务调度:下发调度任务,路线为%s' % agv_task_route) - rec._delivery_avg() rec.state = '配送中' rec.task_delivery_time = fields.Datetime.now() rec.site_state = '空闲' rec.end_site_id = agv_task_route.end_site_id.id rec.agv_route_id = agv_task_route.id + # rec._delivery_avg() # 更新接驳站状态 rec.env['sf.agv.site'].update_site_state({rec.end_site_id.name: '占用'}, False) @@ -242,13 +242,13 @@ class AgvScheduling(models.Model): elif vals['state'] == '已配送': self.env['sf.workpiece.delivery'].search([('agv_scheduling_id', '=', self.id)]).write({ 'status': '已配送', - 'feeder_station_destination_id': self.end_site_id, + 'feeder_station_destination_id': self.end_site_id.id, 'route_id': self.agv_route_id.id, 'task_completion_time': fields.Datetime.now() }) elif vals['state'] == '配送中': self.env['sf.workpiece.delivery'].search([('agv_scheduling_id', '=', self.id)]).write({ - 'feeder_station_destination_id': self.end_site_id, + 'feeder_station_destination_id': self.end_site_id.id, 'route_id': self.agv_route_id.id, 'task_delivery_time': fields.Datetime.now() }) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 466e9a62..8e1f7199 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -797,7 +797,7 @@ class MrpProduction(models.Model): }) return action - # 返工 + # 报废 def button_scrap_new(self): cloud_programming = self._cron_get_programming_state() return { @@ -969,12 +969,12 @@ class MrpProduction(models.Model): 'location_dest_id', '=', self.env['stock.location'].search([('parent_path', '=', '2/5/')]).id), ('location_src_id', '=', self.env['stock.location'].search( [('barcode', '=', 'CP')]).id)]) - origin = move._prepare_procurement_origin() + # origin = move._prepare_procurement_origin() procurement_requests.append(self.env['procurement.group'].Procurement( move.product_id, 1.0, move.product_uom, self.env['stock.location'].search([('barcode', '=', 'CP')]), rule and rule.name or "/", - origin, move.company_id, move_values)) + sale_order.name, move.company_id, move_values)) self.env['procurement.group'].run(procurement_requests, raise_user_error=not self.env.context.get('from_orderpoint')) # self.env['stock.move'].sudo().create(productions._get_moves_finished_values()) @@ -986,7 +986,6 @@ class MrpProduction(models.Model): [('origin', '=', self.origin)], order='id desc', limit=1) move = self.env['stock.move'].search([('origin', '=', productions.name)], order='id desc') for mo in move: - print(mo.id) if mo.procure_method == 'make_to_order' and mo.name != productions.name: if mo.name == '/': domain = [('barcode', '=', 'WH-PC'), ('sequence_code', '=', 'PC')] @@ -1001,6 +1000,14 @@ class MrpProduction(models.Model): if mo.production_id: if mo.production_id != productions: mo.production_id = False + mo_move = self.env['stock.move'].search( + [('origin', '=', sale_order.name), ('reference', 'ilike', 'WH/MO/')]) + if mo_move: + sfp_move = self.env['stock.move'].search( + [('origin', '=', sale_order.name), ('reference', 'ilike', 'WH/SFP/')], limit=1) + mo_move.write({'reference': sfp_move.reference, 'partner_id': sfp_move.partner_id.id, + 'picking_id': sfp_move.picking_id.id, 'picking_type_id': sfp_move.picking_type_id.id, + 'production_id': False}) productions.write({'programming_no': self.programming_no, 'is_remanufacture': True}) productions.procurement_group_id.mrp_production_ids.move_dest_ids.write( {'group_id': self.env['procurement.group'].search([('name', '=', sale_order.name)])}) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index a69160cb..abe08c48 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1674,14 +1674,14 @@ class WorkPieceDelivery(models.Model): obj.feeder_station_start_id.name, obj.feeder_station_destination_id.name) return obj - @api.constrains('route_id') - def _check_route_id(self): - if self.type == '运送空料架': - if self.route_id and self.name is False: - route = self.sudo().search( - [('route_id', '=', self.route_id.id), ('id', '!=', self.id), ('name', 'ilike', '运送空料架路线')]) - if route: - raise UserError("该任务路线已存在,请重新选择") + # @api.constrains('route_id') + # def _check_route_id(self): + # if self.type == '运送空料架': + # if self.route_id and self.name is False: + # route = self.sudo().search( + # [('route_id', '=', self.route_id.id), ('id', '!=', self.id), ('name', 'ilike', '运送空料架路线')]) + # if route: + # raise UserError("该任务路线已存在,请重新选择") # @api.constrains('name') # def _check_name(self): diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index b1c1ff1e..99d27576 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -130,7 +130,7 @@ attrs="{'invisible': ['|',('state', '!=', 'rework') ,('programming_state', '!=', '已编程')]}"/>