This commit is contained in:
jinling.yang
2024-08-22 10:52:28 +08:00
5 changed files with 36 additions and 28 deletions

View File

@@ -436,6 +436,7 @@ class Manufacturing_Connect(http.Controller):
DeciveId))) DeciveId)))
total_data = request.env['sf.shelf.location.datasync'].sudo().get_total_data() total_data = request.env['sf.shelf.location.datasync'].sudo().get_total_data()
for item in shelfinfo: for item in shelfinfo:
logging.info('货架已获取信息:%s' % item)
shelf_barcode = request.env['sf.shelf.location.datasync'].sudo().find_our_code( shelf_barcode = request.env['sf.shelf.location.datasync'].sudo().find_our_code(
total_data, item['Postion']) total_data, item['Postion'])
location_id = request.env['sf.shelf.location'].sudo().search( location_id = request.env['sf.shelf.location'].sudo().search(
@@ -450,15 +451,15 @@ class Manufacturing_Connect(http.Controller):
if tool: if tool:
location_id.product_sn_id = tool.barcode_id.id location_id.product_sn_id = tool.barcode_id.id
# 修改功能刀具状态 # 修改功能刀具状态
tool_state = {'Nomal': '正常', 'Warning': '报警'} if item.get('State') == '报警':
if tool_state.get(item.get('State')): if tool.functional_tool_status != item.get('State'):
if tool_state.get(item.get('State')) != tool.functional_tool_status:
tool.write({ tool.write({
'functional_tool_status': tool_state.get(item['State']) 'functional_tool_status': item['State']
}) })
else: else:
location_id.product_sn_id = False location_id.product_sn_id = False
logging.info('货架已获取信息:%s' % item) if item['RfidCode']:
logging.info('Rfid为【%s】的功能刀具在系统中不存在!' % item['RfidCode'])
else: else:
equipment_id = request.env['maintenance.equipment'].sudo().search([('name', '=', DeciveId)]) equipment_id = request.env['maintenance.equipment'].sudo().search([('name', '=', DeciveId)])
if equipment_id: if equipment_id:
@@ -683,9 +684,14 @@ class Manufacturing_Connect(http.Controller):
request.env['center_control.interface.log'].sudo().create( request.env['center_control.interface.log'].sudo().create(
{'content': ret, 'name': 'AutoDeviceApi/AGVStationState'}) {'content': ret, 'name': 'AutoDeviceApi/AGVStationState'})
logging.info('ret:%s' % ret) logging.info('ret:%s' % ret)
if 'DeviceId' in ret and 'AtHome' in ret: ret = ret['param']
logging.info('DeviceId:%s, AtHome:%s' % (ret['DeviceId'], ret['AtHome'])) params = {}
request.env['sf.agv.site'].update_site_state({ret['DeviceId']: '占用' if ret['AtHome'] else '空闲'}) 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: except Exception as e:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': str(e)} res = {'Succeed': False, 'ErrorCode': 202, 'Error': str(e)}
logging.info('AGVDownProduct error:%s' % e) logging.info('AGVDownProduct error:%s' % e)

View File

@@ -242,13 +242,13 @@ class AgvScheduling(models.Model):
elif vals['state'] == '已配送': elif vals['state'] == '已配送':
self.env['sf.workpiece.delivery'].search([('agv_scheduling_id', '=', self.id)]).write({ self.env['sf.workpiece.delivery'].search([('agv_scheduling_id', '=', self.id)]).write({
'status': '已配送', '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, 'route_id': self.agv_route_id.id,
'task_completion_time': fields.Datetime.now() 'task_completion_time': fields.Datetime.now()
}) })
elif vals['state'] == '配送中': elif vals['state'] == '配送中':
self.env['sf.workpiece.delivery'].search([('agv_scheduling_id', '=', self.id)]).write({ 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, 'route_id': self.agv_route_id.id,
'task_delivery_time': fields.Datetime.now() 'task_delivery_time': fields.Datetime.now()
}) })

View File

@@ -1671,14 +1671,14 @@ class WorkPieceDelivery(models.Model):
obj.feeder_station_start_id.name, obj.feeder_station_destination_id.name) obj.feeder_station_start_id.name, obj.feeder_station_destination_id.name)
return obj return obj
@api.constrains('route_id') # @api.constrains('route_id')
def _check_route_id(self): # def _check_route_id(self):
if self.type == '运送空料架': # if self.type == '运送空料架':
if self.route_id and self.name is False: # if self.route_id and self.name is False:
route = self.sudo().search( # route = self.sudo().search(
[('route_id', '=', self.route_id.id), ('id', '!=', self.id), ('name', 'ilike', '运送空料架路线')]) # [('route_id', '=', self.route_id.id), ('id', '!=', self.id), ('name', 'ilike', '运送空料架路线')])
if route: # if route:
raise UserError("该任务路线已存在,请重新选择") # raise UserError("该任务路线已存在,请重新选择")
# @api.constrains('name') # @api.constrains('name')
# def _check_name(self): # def _check_name(self):

View File

@@ -10,7 +10,8 @@
<attribute name="groups">sf_base.group_sale_salemanager,sf_base.group_sale_director</attribute> <attribute name="groups">sf_base.group_sale_salemanager,sf_base.group_sale_director</attribute>
</xpath> </xpath>
<xpath expr="//button[@name='action_view_mrp_production']" position="attributes"> <xpath expr="//button[@name='action_view_mrp_production']" position="attributes">
<attribute name="groups">mrp.group_mrp_user,sf_base.group_sale_salemanager,sf_base.group_sale_director <attribute name="groups">
mrp.group_mrp_user,sf_base.group_sale_salemanager,sf_base.group_sale_director
</attribute> </attribute>
</xpath> </xpath>
<xpath expr="//field[@name='user_id']" position="replace"> <xpath expr="//field[@name='user_id']" position="replace">
@@ -42,12 +43,12 @@
<xpath expr="//form/header/button[@name='action_confirm'][2]" position="replace"> <xpath expr="//form/header/button[@name='action_confirm'][2]" position="replace">
<button name="action_confirm" data-hotkey="v" <button name="action_confirm" data-hotkey="v"
string="确认接单" type="object" context="{'validate_analytic': True}" string="确认接单" type="object" context="{'validate_analytic': True}"
attrs="{'invisible': ['|','&amp;','|',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel']),'&amp;','&amp;',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel']),('delivery_status', '!=', False),('state', 'in', ['cancel'])]}"/> attrs="{'invisible': ['|', ('state', 'in', ['cancel']), '|','&amp;',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel']),'&amp;','&amp;',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel']),('delivery_status', '!=', False)]}"/>
</xpath> </xpath>
<xpath expr="//form/header/button[@name='action_cancel']" position="attributes"> <xpath expr="//form/header/button[@name='action_cancel']" position="attributes">
<attribute name="attrs">{'invisible': ['|','&amp;','|', ('check_status', '!=', 'approved'),('state', <attribute name="attrs">{'invisible': ['|', ('state', 'in', ['cancel']), '|','&amp;',
'in', ['draft','cancel']),'&amp;','&amp;',('check_status', '=', 'approved'),('state', 'in', ('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel']),'&amp;','&amp;',('check_status',
['sale','cancel']),('delivery_status', '!=', False), ('state', 'in', ['cancel'])]} '=', 'approved'),('state', 'in', ['sale','cancel']),('delivery_status', '!=', False)]}
</attribute> </attribute>
</xpath> </xpath>
<xpath expr="//form/header/button[@name='action_draft']" position="attributes"> <xpath expr="//form/header/button[@name='action_draft']" position="attributes">

View File

@@ -110,6 +110,7 @@ class MrsShelfLocationDataSync(models.Model):
total_data = self.get_total_data() total_data = self.get_total_data()
print('shelfinfo:', shelfinfo) print('shelfinfo:', shelfinfo)
for item in shelfinfo: for item in shelfinfo:
logging.info('货架已获取信息:%s' % item)
shelf_barcode = self.find_our_code(total_data, item['Postion']) shelf_barcode = self.find_our_code(total_data, item['Postion'])
location_id = self.env['sf.shelf.location'].search([('barcode', '=', shelf_barcode)], limit=1) location_id = self.env['sf.shelf.location'].search([('barcode', '=', shelf_barcode)], limit=1)
if location_id: if location_id:
@@ -121,14 +122,15 @@ class MrsShelfLocationDataSync(models.Model):
if tool: if tool:
location_id.product_sn_id = tool.barcode_id.id location_id.product_sn_id = tool.barcode_id.id
# 修改功能刀具状态 # 修改功能刀具状态
tool_state = {'Nomal': '正常', 'Warning': '报警'} if item.get('State') == '报警':
if tool_state.get(item.get('State')): if tool.functional_tool_status != item.get('State'):
if tool_state.get(item.get('State')) != tool.functional_tool_status:
tool.write({ tool.write({
'functional_tool_status': tool_state.get(item['State']) 'functional_tool_status': item['State']
}) })
else: else:
location_id.product_sn_id = False location_id.product_sn_id = False
if item['RfidCode']:
logging.info('Rfid为【%s】的功能刀具在系统中不存在!' % item['RfidCode'])
else: else:
stock_lot_obj = self.env['stock.lot'].search([('rfid', '=', item['RfidCode'])], limit=1) stock_lot_obj = self.env['stock.lot'].search([('rfid', '=', item['RfidCode'])], limit=1)
if stock_lot_obj: if stock_lot_obj:
@@ -136,7 +138,6 @@ class MrsShelfLocationDataSync(models.Model):
else: else:
location_id.product_sn_id = False location_id.product_sn_id = False
logging.info('货架已获取信息:%s' % item)
except Exception as e: except Exception as e:
logging.info("捕获错误信息:%s" % e) logging.info("捕获错误信息:%s" % e)
raise ValidationError("数据错误导致同步失败,请联系管理员") raise ValidationError("数据错误导致同步失败,请联系管理员")