1.修复工件配送2.优化运送空料架.3.cloud下发编程单至sf时,将程序单pdf同步至制造订单的装夹预调工单的加工图纸上4.修复工件上下产线接口
This commit is contained in:
@@ -26,7 +26,8 @@ class AgvSetting(models.Model):
|
|||||||
timestamp = int(time.time())
|
timestamp = int(time.time())
|
||||||
center_control_url += str(timestamp)
|
center_control_url += str(timestamp)
|
||||||
logging.info('工件配送-请求中控地址:%s' % center_control_url)
|
logging.info('工件配送-请求中控地址:%s' % center_control_url)
|
||||||
center_control_r = requests.get(center_control_url, params={}, headers=headers)
|
try:
|
||||||
|
center_control_r = requests.get(center_control_url, headers=headers, timeout=60) # 设置超时为60秒
|
||||||
ret = center_control_r.json()
|
ret = center_control_r.json()
|
||||||
logging.info('工件配送-请求中控站点信息:%s' % ret)
|
logging.info('工件配送-请求中控站点信息:%s' % ret)
|
||||||
self.env['center_control.interface.log'].sudo().create(
|
self.env['center_control.interface.log'].sudo().create(
|
||||||
@@ -40,6 +41,13 @@ class AgvSetting(models.Model):
|
|||||||
item.state = '占用'
|
item.state = '占用'
|
||||||
else:
|
else:
|
||||||
item.state = '空闲'
|
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):
|
class AgvTaskRoute(models.Model):
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
('已完工', '已完工'),
|
('已完工', '已完工'),
|
||||||
], string='工序状态', default='待装夹', readonly='True')
|
], string='工序状态', default='待装夹', readonly='True')
|
||||||
# 加工图纸
|
# 加工图纸
|
||||||
processing_drawing = fields.Binary(string='加工图纸', related='production_id.part_drawing')
|
processing_drawing = fields.Binary(string='加工图纸')
|
||||||
|
|
||||||
@api.depends('production_id')
|
@api.depends('production_id')
|
||||||
def _compute_save_name(self):
|
def _compute_save_name(self):
|
||||||
@@ -1229,15 +1229,25 @@ class WorkPieceDelivery(models.Model):
|
|||||||
status = fields.Selection(
|
status = fields.Selection(
|
||||||
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', default='待下发')
|
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', default='待下发')
|
||||||
is_cnc_program_down = fields.Boolean('程序是否下发', default=False)
|
is_cnc_program_down = fields.Boolean('程序是否下发', default=False)
|
||||||
|
is_manual_work = fields.Boolean('人工操作', default=False)
|
||||||
active = fields.Boolean(string="有效", default=True)
|
active = fields.Boolean(string="有效", default=True)
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
if vals.get('name', '/') == '/' or vals.get('name', '/') is False:
|
if vals.get('name', '/') == '/' or vals.get('name', '/') is False:
|
||||||
vals['name'] = self.env['ir.sequence'].next_by_code('sf.workpiece.delivery') or '/'
|
vals['name'] = self.env['ir.sequence'].next_by_code('sf.workpiece.delivery') or '/'
|
||||||
|
else:
|
||||||
|
vals['type'] = '运送空料架'
|
||||||
obj = super(WorkPieceDelivery, self).create(vals)
|
obj = super(WorkPieceDelivery, self).create(vals)
|
||||||
return obj
|
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):
|
def action_delivery_history(self):
|
||||||
return {
|
return {
|
||||||
'name': _('配送历史'),
|
'name': _('配送历史'),
|
||||||
@@ -1287,6 +1297,8 @@ class WorkPieceDelivery(models.Model):
|
|||||||
is_not_route += 1
|
is_not_route += 1
|
||||||
# else:
|
# else:
|
||||||
# raise UserError('请选择【任务路线】再进行配送')
|
# raise UserError('请选择【任务路线】再进行配送')
|
||||||
|
# if item.production_id.production_line_state == '已下产线' and item.state == '待下发' and item.type == '下产线':
|
||||||
|
# raise UserError('该制造订单已下产线,无需配送')
|
||||||
if production_type != item.type:
|
if production_type != item.type:
|
||||||
raise UserError('请选择类型为%s的制造订单进行配送' % production_type)
|
raise UserError('请选择类型为%s的制造订单进行配送' % production_type)
|
||||||
if down_status != item.status:
|
if down_status != item.status:
|
||||||
@@ -1340,13 +1352,14 @@ class WorkPieceDelivery(models.Model):
|
|||||||
is_free = False
|
is_free = False
|
||||||
agv_site = self.env['sf.agv.site'].search([])
|
agv_site = self.env['sf.agv.site'].search([])
|
||||||
if agv_site:
|
if agv_site:
|
||||||
agv_site.update_site_state()
|
has_site = agv_site.update_site_state()
|
||||||
|
if has_site is True:
|
||||||
for item in self:
|
for item in self:
|
||||||
|
if item.type in ['上产线', '下产线']:
|
||||||
logging.info('工件配送-起点状态:%s-%s' % (
|
logging.info('工件配送-起点状态:%s-%s' % (
|
||||||
item.feeder_station_start_id.name, item.feeder_station_start_id.state))
|
item.feeder_station_start_id.name, item.feeder_station_start_id.state))
|
||||||
logging.info('工件配送-终点状态:%s-%s' % (
|
logging.info('工件配送-终点状态:%s-%s' % (
|
||||||
item.feeder_station_destination_id.name, item.feeder_station_destination_id.state))
|
item.feeder_station_destination_id.name, item.feeder_station_destination_id.state))
|
||||||
if item.type in ['上产线', '下产线']:
|
|
||||||
if (
|
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 == '空闲') or (
|
||||||
item.feeder_station_start_id.state == '空闲' and item.feeder_station_destination_id.state == '空闲'):
|
item.feeder_station_start_id.state == '空闲' and item.feeder_station_destination_id.state == '空闲'):
|
||||||
@@ -1356,6 +1369,8 @@ class WorkPieceDelivery(models.Model):
|
|||||||
is_free = True
|
is_free = True
|
||||||
logging.info('is_free:%s' % is_free)
|
logging.info('is_free:%s' % is_free)
|
||||||
return is_free
|
return is_free
|
||||||
|
else:
|
||||||
|
raise UserError("接驳站暂未反馈站点实时状态,请稍后再试")
|
||||||
|
|
||||||
# 配送至avg小车
|
# 配送至avg小车
|
||||||
def _delivery_avg(self):
|
def _delivery_avg(self):
|
||||||
|
|||||||
@@ -659,7 +659,9 @@
|
|||||||
<field name="search_view_id" ref="sf_workpiece_delivery_search"/>
|
<field name="search_view_id" ref="sf_workpiece_delivery_search"/>
|
||||||
<field name="context">{'search_default_on_up':1}</field>
|
<field name="context">{'search_default_on_up':1}</field>
|
||||||
<field name="view_mode">tree,search</field>
|
<field name="view_mode">tree,search</field>
|
||||||
<field name="domain">[('type','in',['上产线','下产线']),('workorder_state','=','done')]</field>
|
<field name="domain">
|
||||||
|
[('type','in',['上产线','下产线']),('workorder_state','=','done'),('is_manual_work','=',false)]
|
||||||
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
@@ -668,14 +670,18 @@
|
|||||||
<field name="name">空料架配送</field>
|
<field name="name">空料架配送</field>
|
||||||
<field name="model">sf.workpiece.delivery</field>
|
<field name="model">sf.workpiece.delivery</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="工件配送" class="center" create="0" edit="0" delete="0">
|
<tree string="工件配送" editable="bottom" class="center" delete="0" create="1">
|
||||||
<header>
|
<header>
|
||||||
<button name="button_delivery" type="object" string="配送" class="oe_highlight"/>
|
<button name="button_delivery" type="object" string="配送" class="oe_highlight"/>
|
||||||
</header>
|
</header>
|
||||||
<field name="name" string="路线名称" readonly="1"/>
|
<field name="name" string="路线名称" attrs="{'readonly': [('id', '!=', False)]}"
|
||||||
<field name="route_id" options="{'no_create': True}"/>
|
placeholder="例如:运送空料架路线:G01-A01" required="1" force_save="1"/>
|
||||||
<field name="feeder_station_start_id" readonly="1"/>
|
<field name="route_id" options="{'no_create': True}" required="1"
|
||||||
<field name="feeder_station_destination_id" readonly="1"/>
|
attrs="{'readonly': [('id', '!=', False)]}" domain="[('route_type', '=', '运送空料架')]"
|
||||||
|
force_save="1"/>
|
||||||
|
<field name="feeder_station_start_id" readonly="1" force_save="1"/>
|
||||||
|
<!-- <field name="type" readonly="1"/>-->
|
||||||
|
<field name="feeder_station_destination_id" readonly="1" force_save="1"/>
|
||||||
<button name="action_delivery_history" type="object" class="btn btn-link text-info" icon="fa-history"
|
<button name="action_delivery_history" type="object" class="btn btn-link text-info" icon="fa-history"
|
||||||
string="历史"/>
|
string="历史"/>
|
||||||
</tree>
|
</tree>
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ class Sf_Mrs_Connect(http.Controller):
|
|||||||
logging.info('cnc_processing_arr:%s' % cnc_processing_arr)
|
logging.info('cnc_processing_arr:%s' % cnc_processing_arr)
|
||||||
if cnc_program and cnc_processing_arr:
|
if cnc_program and cnc_processing_arr:
|
||||||
cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'})
|
cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'})
|
||||||
|
cnc_program.workorder_ids.filtered(lambda b1: b1.routing_type == '装夹预调').write(
|
||||||
|
{'processing_drawing': cnc_production.workorder_ids.filtered(
|
||||||
|
lambda b1: b1.routing_type == 'CNC加工').cnc_worksheet})
|
||||||
cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write(
|
cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write(
|
||||||
{'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered(
|
{'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered(
|
||||||
lambda b: b.routing_type == 'CNC加工').cnc_worksheet})
|
lambda b: b.routing_type == 'CNC加工').cnc_worksheet})
|
||||||
|
|||||||
Reference in New Issue
Block a user