Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化表面工艺
This commit is contained in:
@@ -245,32 +245,32 @@ class Machine_ftp(models.Model):
|
||||
program_status = fields.Char('程序运行状态', readonly=True)
|
||||
current_program = fields.Char('机床当前执行指令', readonly=True)
|
||||
current_program_seq = fields.Char('机床当前执行语句号', readonly=True)
|
||||
x_abs_pos = fields.Char('机床X轴当前位置', readonly=True)
|
||||
y_abs_pos = fields.Char('机床Y轴当前位置', readonly=True)
|
||||
z_abs_pos = fields.Char('机床Z轴当前位置', readonly=True)
|
||||
x_abs_pos = fields.Char('机床X轴当前位置(mm)', readonly=True)
|
||||
y_abs_pos = fields.Char('机床Y轴当前位置(mm)', readonly=True)
|
||||
z_abs_pos = fields.Char('机床Z轴当前位置(mm)', readonly=True)
|
||||
|
||||
# 机床设定进给速度, 机床实际进给速度, 机床设定主轴转速, 机床实际主轴转速, 机床主轴负载, 机床X轴伺服轴负载, 机床Y轴伺服轴负载
|
||||
# 机床Z轴伺服轴负载, 机床快速移动倍率, 机床进给倍率, 机床X轴机械坐标, 机床Y轴机械坐标, 机床Z轴机械坐标, 机床X轴相对工件坐标
|
||||
# 机床Y轴相对工件坐标, 机床Z轴相对工件坐标, 机床X轴目标距离, 机床Y轴目标距离, 机床Z轴目标距离
|
||||
feed_speed_set = fields.Char('机床设定进给速度', readonly=True)
|
||||
act_feed_speed = fields.Char('机床实际进给速度', readonly=True)
|
||||
spindle_speed_set = fields.Char('机床设定主轴转速', readonly=True)
|
||||
act_spindle_speed = fields.Char('机床实际主轴转速', readonly=True)
|
||||
spindle_load = fields.Char('机床主轴负载', readonly=True)
|
||||
x_axis_load = fields.Char('机床X轴伺服轴负载', readonly=True)
|
||||
y_axis_load = fields.Char('机床Y轴伺服轴负载', readonly=True)
|
||||
z_axis_load = fields.Char('机床Z轴伺服轴负载', readonly=True)
|
||||
rapid_feed = fields.Char('机床快速移动倍率', readonly=True)
|
||||
feed_rate = fields.Char('机床进给倍率', readonly=True)
|
||||
x_mach_coord = fields.Char('机床X轴机械坐标', readonly=True)
|
||||
y_mach_coord = fields.Char('机床Y轴机械坐标', readonly=True)
|
||||
z_mach_coord = fields.Char('机床Z轴机械坐标', readonly=True)
|
||||
x_rel_coord = fields.Char('机床X轴相对工件坐标', readonly=True)
|
||||
y_rel_coord = fields.Char('机床Y轴相对工件坐标', readonly=True)
|
||||
z_rel_coord = fields.Char('机床Z轴相对工件坐标', readonly=True)
|
||||
x_dis_coord = fields.Char('机床X轴目标距离', readonly=True)
|
||||
y_dis_coord = fields.Char('机床Y轴目标距离', readonly=True)
|
||||
z_dis_coord = fields.Char('机床Z轴目标距离', readonly=True)
|
||||
feed_speed_set = fields.Char('机床设定进给速度(mm/min)', readonly=True)
|
||||
act_feed_speed = fields.Char('机床实际进给速度(mm/min)', readonly=True)
|
||||
spindle_speed_set = fields.Char('机床设定主轴转速(r/min)', readonly=True)
|
||||
act_spindle_speed = fields.Char('机床实际主轴转速(r/min)', readonly=True)
|
||||
spindle_load = fields.Char('机床主轴负载(%)', readonly=True)
|
||||
x_axis_load = fields.Char('机床X轴伺服轴负载(%)', readonly=True)
|
||||
y_axis_load = fields.Char('机床Y轴伺服轴负载(%)', readonly=True)
|
||||
z_axis_load = fields.Char('机床Z轴伺服轴负载(%)', readonly=True)
|
||||
rapid_feed = fields.Char('机床快速移动倍率(%)', readonly=True)
|
||||
feed_rate = fields.Char('机床进给倍率(%)', readonly=True)
|
||||
x_mach_coord = fields.Char('机床X轴机械坐标(mm)', readonly=True)
|
||||
y_mach_coord = fields.Char('机床Y轴机械坐标(mm)', readonly=True)
|
||||
z_mach_coord = fields.Char('机床Z轴机械坐标(mm)', readonly=True)
|
||||
x_rel_coord = fields.Char('机床X轴相对工件坐标(mm)', readonly=True)
|
||||
y_rel_coord = fields.Char('机床Y轴相对工件坐标(mm)', readonly=True)
|
||||
z_rel_coord = fields.Char('机床Z轴相对工件坐标(mm)', readonly=True)
|
||||
x_dis_coord = fields.Char('机床X轴目标距离(mm)', readonly=True)
|
||||
y_dis_coord = fields.Char('机床Y轴目标距离(mm)', readonly=True)
|
||||
z_dis_coord = fields.Char('机床Z轴目标距离(mm)', readonly=True)
|
||||
|
||||
# 故障报警时间, 故障报警信息, 故障消除时间(复原时间)
|
||||
alarm_time = fields.Char('故障报警时间', readonly=True)
|
||||
|
||||
@@ -10,21 +10,21 @@ class SfMaintenanceLogs(models.Model):
|
||||
name = fields.Char(string='名称')
|
||||
type = fields.Selection([('type1', '类型1'), ('type2', '类型2')], string='类型')
|
||||
brand = fields.Many2one('sf.machine.brand', related='maintenance_equipment_id.brand_id', string='品牌')
|
||||
maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='设备')
|
||||
maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='机台号')
|
||||
maintenance_equipment_oee_id = fields.Many2one('maintenance.equipment.oee', string='设备oee')
|
||||
code_location = fields.Char(string='编码位置')
|
||||
fault_type = fields.Selection(
|
||||
[('电气类', '电气类'), ('机械类', '机械类'), ('程序类', '程序类'), ('系统类', '系统类')], string='故障类型')
|
||||
fault_code = fields.Char(string='故障代码')
|
||||
fault_alarm_info = fields.Char(string='故障报警信息')
|
||||
fault_alarm_info = fields.Text(string='故障报警信息')
|
||||
alarm_level = fields.Selection([('一级', '一级(严重)'), ('二级', '二级(中等)'), ('三级', '三级(轻微)')],
|
||||
string='报警级别')
|
||||
alarm_time = fields.Datetime(string='报警时间')
|
||||
alarm_time = fields.Datetime(string='故障报警时间')
|
||||
alarm_way = fields.Selection([('文本提示报警', '文本提示报警'), ('声光报警', '声光报警'), ('图文报警', '图文报警')],
|
||||
string='报警方式')
|
||||
fault_process = fields.Text(string='故障处理方法')
|
||||
operator = fields.Many2one('res.users', string='处理人')
|
||||
recovery_time = fields.Datetime(string='复原时间')
|
||||
recovery_time = fields.Datetime(string='故障消除时间')
|
||||
fault_duration = fields.Float(string='故障时长')
|
||||
note = fields.Text(string='备注')
|
||||
active = fields.Boolean('Active', default=True)
|
||||
|
||||
@@ -7,20 +7,23 @@ class SfMaintenanceEquipmentOEE(models.Model):
|
||||
_description = '设备OEE'
|
||||
|
||||
name = fields.Char('设备oee')
|
||||
equipment_id = fields.Many2one('maintenance.equipment', '设备',
|
||||
equipment_id = fields.Many2one('maintenance.equipment', '机台号',
|
||||
domain="[('category_id.equipment_type', '=', '机床'),('state_zc', '=', '已注册')]")
|
||||
type_id = fields.Many2one('sf.machine_tool.type', '型号', related='equipment_id.type_id')
|
||||
machine_tool_picture = fields.Binary('设备图片', related='equipment_id.machine_tool_picture')
|
||||
machine_tool_picture = fields.Binary('设备图片', related='equipment_id.machine_tool_picture')
|
||||
state = fields.Selection(
|
||||
[("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"), ("空闲", "空闲"),
|
||||
("封存(报废)", "封存(报废)")],
|
||||
default='正常', string="机床状态", related='equipment_id.state')
|
||||
run_time = fields.Float('正常运行总时长(h)')
|
||||
equipment_time = fields.Float('总时长(h)')
|
||||
done_nums = fields.Integer('累计加工总件数')
|
||||
utilization_rate = fields.Char('开动率')
|
||||
fault_time = fields.Float('故障停机总时长(h)')
|
||||
run_time = fields.Float('加工时长(h)')
|
||||
equipment_time = fields.Float('开机时长(h)')
|
||||
done_nums = fields.Integer('加工件数')
|
||||
utilization_rate = fields.Char('可用率')
|
||||
fault_time = fields.Float('故障时长')
|
||||
fault_nums = fields.Integer('故障次数')
|
||||
# 故障率
|
||||
fault_rate = fields.Char('故障率')
|
||||
# 设备故障日志
|
||||
sf_maintenance_logs_ids = fields.One2many('sf.maintenance.logs', 'maintenance_equipment_oee_id', '设备故障日志',
|
||||
related='equipment_id.sf_maintenance_logs_ids')
|
||||
oee_logs = fields.One2many('maintenance.equipment.oee.logs', 'equipment_oee_id', string='运行日志')
|
||||
@@ -38,12 +41,46 @@ class SfMaintenanceEquipmentOEELog(models.Model):
|
||||
_name = 'maintenance.equipment.oee.logs'
|
||||
_description = '设备运行日志'
|
||||
|
||||
name = fields.Char('运行日志')
|
||||
run_time = fields.Datetime('时间')
|
||||
state = fields.Selection([("开机", "开机"), ("关机", "关机"), ("等待", "等待"), ("开始加工", "开始加工"),
|
||||
("结束加工", "结束加工"), ("故障", "故障"),
|
||||
("检修", "检修"), ("保养", "保养")], default="", string="事件/状态")
|
||||
workorder_id = fields.Char('加工订单')
|
||||
time = fields.Char('持续时长')
|
||||
color = fields.Char('颜色', default=1)
|
||||
equipment_id = fields.Many2one('maintenance.equipment', '机台号')
|
||||
name = fields.Char('设备名称')
|
||||
machine_tool_picture = fields.Binary('设备图片')
|
||||
type_id = fields.Many2one('sf.machine_tool.type', '品牌型号')
|
||||
state = fields.Selection([("加工", "加工"), ("关机", "关机"), ("待机", "待机"), ("故障", "故障"),
|
||||
("检修", "检修"), ("保养", "保养")], default="", string="实时状态")
|
||||
online_time = fields.Char('开机时长')
|
||||
|
||||
offline_time = fields.Char('关机时长')
|
||||
offline_nums = fields.Integer('关机次数')
|
||||
# 待机时长
|
||||
|
||||
idle_time = fields.Char('待机时长')
|
||||
|
||||
# 待机率
|
||||
idle_rate = fields.Char('待机率')
|
||||
|
||||
work_time = fields.Char('加工时长')
|
||||
work_rate = fields.Char('可用率')
|
||||
fault_time = fields.Char('故障时长')
|
||||
fault_rate = fields.Char('故障率')
|
||||
fault_nums = fields.Integer('故障次数')
|
||||
|
||||
detail_ids = fields.One2many('maintenance.equipment.oee.log.detail', 'log_id', string='日志详情')
|
||||
|
||||
# maintenance_time = fields.Char('维保时长')
|
||||
# work_nums = fields.Integer('加工件数')
|
||||
equipment_oee_id = fields.Many2one('maintenance.equipment.oee', '设备OEE')
|
||||
|
||||
|
||||
# 设备运行日志详情
|
||||
class SfMaintenanceEquipmentOEELogDetail(models.Model):
|
||||
_name = 'maintenance.equipment.oee.log.detail'
|
||||
_description = '设备运行日志详情'
|
||||
|
||||
sequence = fields.Integer('序号')
|
||||
time = fields.Datetime('时间')
|
||||
state = fields.Selection([("加工", "加工"), ("关机", "关机"), ("待机", "待机"), ("故障", "故障"),
|
||||
("检修", "检修"), ("保养", "保养")], default="", string="事件/状态")
|
||||
production_id = fields.Many2one('mrp.production', '加工工单')
|
||||
|
||||
log_id = fields.Many2one('maintenance.equipment.oee.logs', '日志')
|
||||
|
||||
|
||||
@@ -67,3 +67,6 @@ access_sf_cutting_tool_type_admin_sf_group_equipment_user,sf_cutting_tool_type_a
|
||||
access_sf_cutting_tool_type_group_purchase_director_sf_group_equipment_user,sf_cutting_tool_type_group_purchase_director,sf_base.model_sf_cutting_tool_type,sf_maintenance.sf_group_equipment_user,1,0,0,0
|
||||
access_sf_cutting_tool_type_group_sale_director_sf_group_equipment_user,sf_cutting_tool_type_group_sale_director,sf_base.model_sf_cutting_tool_type,sf_maintenance.sf_group_equipment_user,1,0,0,0
|
||||
access_sf_cutting_tool_type_group_plan_director_sf_group_equipment_user,sf_cutting_tool_type_group_plan_director,sf_base.model_sf_cutting_tool_type,sf_maintenance.sf_group_equipment_user,1,0,0,0
|
||||
|
||||
access_maintenance_equipment_oee_logs,maintenance_equipment_oee_logs,model_maintenance_equipment_oee_logs,sf_maintenance.sf_group_equipment_manager,1,1,1,0
|
||||
access_maintenance_equipment_oee_log_detail,maintenance_equipment_oee_log_detail,model_maintenance_equipment_oee_log_detail,sf_maintenance.sf_group_equipment_manager,1,1,1,0
|
||||
|
@@ -14,6 +14,7 @@
|
||||
<field name="utilization_rate"/>
|
||||
<field name="fault_time"/>
|
||||
<field name="fault_nums"/>
|
||||
<field name="fault_rate"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -49,19 +50,19 @@
|
||||
</group>
|
||||
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="运行日志">
|
||||
<field name="oee_logs">
|
||||
<tree create="1" edit="1" delete="1" editable="bottom">
|
||||
<field name = 'run_time'/>
|
||||
<field name = 'state'/>
|
||||
<field name = 'workorder_id'/>
|
||||
<field name = 'time'/>
|
||||
<field name = 'color' widget="color"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
<!-- <notebook> -->
|
||||
<!-- <page string="运行日志"> -->
|
||||
<!-- <field name="oee_logs"> -->
|
||||
<!-- <tree create="1" edit="1" delete="1" editable="bottom"> -->
|
||||
<!-- <field name = 'run_time'/> -->
|
||||
<!-- <field name = 'state'/> -->
|
||||
<!-- <field name = 'workorder_id'/> -->
|
||||
<!-- <field name = 'time'/> -->
|
||||
<!-- <field name = 'color' widget="color"/> -->
|
||||
<!-- </tree> -->
|
||||
<!-- </field> -->
|
||||
<!-- </page> -->
|
||||
<!-- </notebook> -->
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -7,22 +7,20 @@
|
||||
<field name="model">sf.maintenance.logs</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="code"/>
|
||||
<field name="type" optional="hide"/>
|
||||
<field name="brand"/>
|
||||
<field name="maintenance_equipment_id"/>
|
||||
<field name="code_location" optional="hide"/>
|
||||
<field name="fault_type"/>
|
||||
<field name="fault_code" optional="hide"/>
|
||||
<field name="alarm_time"/>
|
||||
<field name="fault_alarm_info"/>
|
||||
<field name="alarm_level" optional="hide"/>
|
||||
<field name="alarm_time"/>
|
||||
<field name="alarm_way" optional="hide"/>
|
||||
<field name="fault_process"/>
|
||||
<field name="operator"/>
|
||||
<field name="fault_process" optional="hide"/>
|
||||
<field name="operator" optional="hide"/>
|
||||
<field name="recovery_time"/>
|
||||
<field name="fault_duration"/>
|
||||
<field name="note"/>
|
||||
<field name="note" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -45,25 +43,32 @@
|
||||
<group>
|
||||
<group>
|
||||
|
||||
<field name="name"/>
|
||||
<field name="type" required="1" widget="radio" options="{'horizontal': true}"/>
|
||||
<field name="brand"/>
|
||||
<!-- <field name="name"/> -->
|
||||
<!-- <field name="type" required="1" widget="radio" options="{'horizontal': true}"/> -->
|
||||
<field name="maintenance_equipment_id"/>
|
||||
<field name="code_location"/>
|
||||
<field name="fault_type" required="1" widget="radio" options="{'horizontal': true}"/>
|
||||
<field name="fault_code"/>
|
||||
<field name="fault_process"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="fault_alarm_info"/>
|
||||
<field name="brand"/>
|
||||
<field name="alarm_time"/>
|
||||
<field name="alarm_way" required="1" widget="radio" options="{'horizontal': true}"/>
|
||||
<field name="operator"/>
|
||||
<field name="recovery_time"/>
|
||||
<field name="fault_duration"/>
|
||||
<field name="note"/>
|
||||
<field name="fault_alarm_info"/>
|
||||
|
||||
<!-- <field name="code_location"/> -->
|
||||
<!-- <field name="fault_type" required="1" widget="radio" options="{'horizontal': true}"/> -->
|
||||
<!-- <field name="fault_code"/> -->
|
||||
|
||||
</group>
|
||||
<group>
|
||||
<field name="operator"/>
|
||||
|
||||
<field name="fault_process"/>
|
||||
<!-- <field name="alarm_way" required="1" widget="radio" options="{'horizontal': true}"/> -->
|
||||
<field name="recovery_time"/>
|
||||
<field name="fault_duration"/>
|
||||
|
||||
|
||||
</group>
|
||||
|
||||
</group>
|
||||
<group>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
@@ -100,6 +105,233 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- 设备运行日志 -->
|
||||
<record id="view_maintenance_logs_run_tree" model="ir.ui.view">
|
||||
<field name="name">maintenance.logs.run.tree</field>
|
||||
<field name="model">maintenance.equipment.oee.logs</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="equipment_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_maintenance_logs_run_form" model="ir.ui.view">
|
||||
<field name="name">maintenance.logs.run.form</field>
|
||||
<field name="model">maintenance.equipment.oee.logs</field>
|
||||
<field name="arch" type="xml">
|
||||
<!-- <form string="设备运行日志"> -->
|
||||
<!-- <header> -->
|
||||
<!-- <field name="equipment_id" readonly="1"/> -->
|
||||
<!-- </header> -->
|
||||
<!-- <sheet> -->
|
||||
<!-- <div class="oe_title"> -->
|
||||
<!-- <h1> -->
|
||||
<!-- <field name="start_time" readonly="1"/> -->
|
||||
<!-- </h1> -->
|
||||
<!-- </div> -->
|
||||
<!-- <group> -->
|
||||
<!-- <group> -->
|
||||
<!-- <field name="stop_time" readonly="1"/> -->
|
||||
<!-- <field name="duration" readonly="1"/> -->
|
||||
<!-- <field name="oee" readonly="1"/> -->
|
||||
<!-- </group> -->
|
||||
<!-- <group> -->
|
||||
<!-- <field name="note"/> -->
|
||||
<!-- </group> -->
|
||||
|
||||
<!-- </group> -->
|
||||
<!-- </sheet> -->
|
||||
<!-- </form> -->
|
||||
<form string="设备运行日志">
|
||||
<!-- <header> -->
|
||||
<!-- <field name="name" readonly="1"/> -->
|
||||
<!-- </header> -->
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="type_id"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<!-- <field name="state" nolabel="1"/> -->
|
||||
<field name="state" string=""/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="machine_tool_picture" widget="image" nolabel="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="online_time" readonly="1"/>
|
||||
<field name="offline_time" readonly="1"/>
|
||||
<field name="fault_rate" readonly="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="offline_nums" readonly="1"/>
|
||||
<field name="fault_time" readonly="1"/>
|
||||
<field name="fault_nums" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="idle_time"/>
|
||||
<field name="idle_rate"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="work_time"/>
|
||||
<field name="work_rate"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="日志详情">
|
||||
<field name="detail_ids">
|
||||
<tree>
|
||||
<field name="sequence"/>
|
||||
<field name="time"/>
|
||||
<field name="state"/>
|
||||
<field name="production_id"/>
|
||||
</tree>
|
||||
<!-- <form> -->
|
||||
<!-- <field name="sequence"/> -->
|
||||
<!-- <field name="time"/> -->
|
||||
<!-- <field name="state"/> -->
|
||||
<!-- <field name="production_id"/> -->
|
||||
<!-- </form> -->
|
||||
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- <record id="view_maintenance_logs_run_search" model="ir.ui.view"> -->
|
||||
<!-- <field name="name">maintenance.logs.run.search</field> -->
|
||||
<!-- <field name="model">maintenance.equipment.oee.logs</field> -->
|
||||
<!-- <field name="arch" type="xml"> -->
|
||||
<!-- <search> -->
|
||||
<!-- <field name="equipment_id"/> -->
|
||||
<!-- <field name="start_time"/> -->
|
||||
<!-- <field name="stop_time"/> -->
|
||||
<!-- <field name="duration"/> -->
|
||||
<!-- <field name="oee"/> -->
|
||||
<!-- <field name="note"/> -->
|
||||
<!-- </search> -->
|
||||
|
||||
<!-- </field> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<!-- 设备运行日志详情 -->
|
||||
<record id="view_maintenance_logs_run_detail_tree" model="ir.ui.view">
|
||||
<field name="name">maintenance.logs.run.detail.tree</field>
|
||||
<field name="model">maintenance.equipment.oee.log.detail</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="sequence"/>
|
||||
<field name="time"/>
|
||||
<field name="state"/>
|
||||
<field name="production_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_maintenance_logs_run_detail_form" model="ir.ui.view">
|
||||
<field name="name">maintenance.logs.run.detail.form</field>
|
||||
<field name="model">maintenance.equipment.oee.log.detail</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="设备运行日志详情">
|
||||
<header>
|
||||
<field name="sequence" readonly="1"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="time" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="state" readonly="1"/>
|
||||
<field name="production_id" readonly="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="log_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="view_maintenance_logs_run_detail_search" model="ir.ui.view"> -->
|
||||
<!-- <field name="name">maintenance.logs.run.detail.search</field> -->
|
||||
<!-- <field name="model">maintenance.equipment.oee.logs.detail</field> -->
|
||||
<!-- <field name="arch" type="xml"> -->
|
||||
<!-- <search> -->
|
||||
<!-- <field name="equipment_id"/> -->
|
||||
<!-- <field name="start_time"/> -->
|
||||
<!-- <field name="stop_time"/> -->
|
||||
<!-- <field name="duration"/> -->
|
||||
<!-- <field name="oee"/> -->
|
||||
<!-- <field name="note"/> -->
|
||||
<!-- </search> -->
|
||||
<!-- </field> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<!-- 设备运行日志详情action -->
|
||||
<!-- <record id="action_maintenance_logs_run_detail" model="ir.actions.act_window"> -->
|
||||
<!-- <field name="name">设备运行日志详情</field> -->
|
||||
<!-- <field name="type">ir.actions.act_window</field> -->
|
||||
<!-- <field name="res_model">maintenance.equipment.oee.logs.detail</field> -->
|
||||
<!-- <field name="view_mode">tree,form</field> -->
|
||||
<!-- <field name="view_id" ref="view_maintenance_logs_run_detail_tree"/> -->
|
||||
<!-- <field name="help" type="html"> -->
|
||||
<!-- <p class="oe_view_nocontent_create"> -->
|
||||
<!-- 设备运行日志详情 -->
|
||||
<!-- </p> -->
|
||||
<!-- </field> -->
|
||||
<!-- -->
|
||||
<!-- </record> -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<record id="action_maintenance_logs_run" model="ir.actions.act_window">
|
||||
<field name="name">设备运行日志</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">maintenance.equipment.oee.logs</field>
|
||||
<!-- <field name="search_view_id" ref="view_maintenance_logs_run_search"/> -->
|
||||
<field name="view_mode">tree,form</field>
|
||||
<!-- <field name="view_mode">form</field> -->
|
||||
<field name="view_id" ref="view_maintenance_logs_run_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
设备运行日志
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<menuitem name="设备运行日志" id="menu_maintenance_logs_run" parent="maintenance.menu_m_request"
|
||||
sequence="10" action="action_maintenance_logs_run"/>
|
||||
|
||||
|
||||
<!-- Action -->
|
||||
|
||||
|
||||
@@ -486,7 +486,9 @@ class Manufacturing_Connect(http.Controller):
|
||||
workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(
|
||||
[
|
||||
('rfid_code', '=', rfid_code), ('type', '=', '上产线'),
|
||||
('production_id', '=', order.production_id.id)])
|
||||
('production_id', '=', order.production_id.id),
|
||||
('workorder_id', '=', order.id),
|
||||
('workorder_state', '=', 'done')])
|
||||
if workpiece_delivery.status == '待下发':
|
||||
workpiece_delivery.write({'is_manual_work': True})
|
||||
else:
|
||||
@@ -548,8 +550,11 @@ class Manufacturing_Connect(http.Controller):
|
||||
workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(
|
||||
[
|
||||
('rfid_code', '=', rfid_code), ('type', '=', '下产线'),
|
||||
('production_id', '=', order.production_id.id)])
|
||||
delivery_Arr.append(workpiece_delivery.id)
|
||||
('production_id', '=', order.production_id.id),
|
||||
('workorder_id', '=', order.id),
|
||||
('workorder_state', '=', 'done')])
|
||||
if workpiece_delivery:
|
||||
delivery_Arr.append(workpiece_delivery.id)
|
||||
else:
|
||||
res = {'Succeed': False, 'ErrorCode': 204,
|
||||
'Error': 'DeviceId为%s没有对应的已配送工件数据' % ret['DeviceId']}
|
||||
|
||||
@@ -734,7 +734,7 @@ class MrpProduction(models.Model):
|
||||
|
||||
for production in self:
|
||||
logging.info('qty_produced:%s' % production.qty_produced)
|
||||
if production.qty_produced == '0.0':
|
||||
if production.qty_produced == 0.0:
|
||||
production.qty_produced = 1.0
|
||||
production.write({
|
||||
'date_finished': fields.Datetime.now(),
|
||||
@@ -897,6 +897,7 @@ class MrpProduction(models.Model):
|
||||
result),
|
||||
'cmm_ids': panel_workorder.cmm_ids.sudo()._json_cmm_program(processing_panel, result),
|
||||
'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
|
||||
logging.info('len(cnc_worksheet):%s' % len(panel_workorder.cnc_worksheet))
|
||||
pre_workorder = production.workorder_ids.filtered(lambda
|
||||
ap: ap.routing_type == '装夹预调' and ap.processing_panel == processing_panel and ap.state not in (
|
||||
'rework', 'done'))
|
||||
|
||||
@@ -567,12 +567,16 @@ class ResMrpWorkOrder(models.Model):
|
||||
up_route = self.env['sf.agv.task.route'].search([('route_type', '=', '上产线')], limit=1, order='id asc')
|
||||
down_route = self.env['sf.agv.task.route'].search([('route_type', '=', '下产线')], limit=1, order='id asc')
|
||||
return [
|
||||
[0, '', {'production_id': production.id, 'type': '上产线', 'route_id': up_route.id,
|
||||
'feeder_station_start_id': up_route.start_site_id.id,
|
||||
'feeder_station_destination_id': up_route.end_site_id.id}],
|
||||
[0, '', {'production_id': production.id, 'type': '下产线', 'route_id': down_route.id,
|
||||
'feeder_station_start_id': down_route.start_site_id.id,
|
||||
'feeder_station_destination_id': down_route.end_site_id.id}]]
|
||||
[0, '',
|
||||
{'production_id': production.id, 'production_line_id': production.production_line_id.id, 'type': '上产线',
|
||||
'route_id': up_route.id,
|
||||
'feeder_station_start_id': up_route.start_site_id.id,
|
||||
'feeder_station_destination_id': up_route.end_site_id.id}],
|
||||
[0, '',
|
||||
{'production_id': production.id, 'production_line_id': production.production_line_id.id, 'type': '下产线',
|
||||
'route_id': down_route.id,
|
||||
'feeder_station_start_id': down_route.start_site_id.id,
|
||||
'feeder_station_destination_id': down_route.end_site_id.id}]]
|
||||
|
||||
# 拼接工单对象属性值(表面工艺)
|
||||
def _json_workorder_surface_process_str(self, production, route, process_parameter, supplier_id):
|
||||
@@ -824,11 +828,17 @@ class ResMrpWorkOrder(models.Model):
|
||||
('state', 'in', ['done'])])
|
||||
if unclamp_workorder:
|
||||
workorder.state = 'ready'
|
||||
# else:
|
||||
# if workorder.state not in ['cancel', 'rework']:
|
||||
# workorder.state = 'rework'
|
||||
if workorder.production_id.state == 'pending_cam':
|
||||
if workorder.routing_type == '装夹预调' and workorder.state in ['ready', 'waiting']:
|
||||
if workorder.production_id.tool_state in ['1', '2']:
|
||||
workorder.state = 'waiting'
|
||||
|
||||
logging.info('工序:%s' % workorder.sequence)
|
||||
logging.info('工单最终状态:%s' % workorder.state)
|
||||
# else:
|
||||
# if workorder.state not in ['cancel', 'rework']:
|
||||
# workorder.state = 'rework'
|
||||
|
||||
# elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress',
|
||||
# 'rework']:
|
||||
# per_work = self.env['mrp.workorder'].search(
|
||||
@@ -879,8 +889,12 @@ class ResMrpWorkOrder(models.Model):
|
||||
raise UserError(_('该制造订单还未下发CNC程序,请稍后再试'))
|
||||
else:
|
||||
if self.production_id.tool_state in ['1', '2']:
|
||||
if self.production_id.tool_state == '1':
|
||||
state = '缺刀'
|
||||
else:
|
||||
state = '无效刀'
|
||||
raise UserError(
|
||||
f'制造订单【{self.production_id.name}】功能刀具状态为【{self.production_id.tool_state}】!')
|
||||
f'制造订单【{self.production_id.name}】功能刀具状态为【{state}】!')
|
||||
if self.routing_type == '解除装夹':
|
||||
'''
|
||||
记录开始时间
|
||||
@@ -1389,7 +1403,8 @@ class WorkPieceDelivery(models.Model):
|
||||
[('上产线', '上产线'), ('下产线', '下产线'), ('运送空料架', '运送空料架')], string='类型')
|
||||
delivery_duration = fields.Float('配送时长', compute='_compute_delivery_duration')
|
||||
status = fields.Selection(
|
||||
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', default='待下发',
|
||||
[('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送'), ('已取消', '已取消')], string='状态',
|
||||
default='待下发',
|
||||
tracking=True)
|
||||
is_cnc_program_down = fields.Boolean('程序是否下发', default=False, tracking=True)
|
||||
is_manual_work = fields.Boolean('人工操作', default=False)
|
||||
|
||||
@@ -475,7 +475,8 @@
|
||||
<field name="status" readonly="1" widget="badge"
|
||||
decoration-success="status == '已配送'"
|
||||
decoration-warning="status == '待下发'"
|
||||
decoration-danger="status == '待配送'"/>
|
||||
decoration-danger="status == '待配送'"
|
||||
decoration-info="status== '已取消'"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
@@ -635,7 +636,9 @@
|
||||
<field name="status" widget="badge"
|
||||
decoration-success="status == '已配送'"
|
||||
decoration-warning="status == '待下发'"
|
||||
decoration-danger="status == '待配送'"/>
|
||||
decoration-danger="status == '待配送'"
|
||||
decoration-info="status == '已取消'"
|
||||
/>
|
||||
<field name="name"/>
|
||||
<field name="production_id"/>
|
||||
<field name="type" readonly="1"/>
|
||||
@@ -731,7 +734,7 @@
|
||||
</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">
|
||||
[('type','in',['上产线','下产线']),('workorder_state','=','done'),('is_manual_work','=',false)]
|
||||
[('type','in',['上产线','下产线']),('workorder_state','in',['done','rework']),('is_manual_work','=',false)]
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<field name="model">sf.maintenance.logs</field>
|
||||
<field name="inherit_id" ref="sf_maintenance.view_maintenance_logs_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='code']" position="after">
|
||||
<xpath expr="//field[@name='type']" position="after">
|
||||
<field name="production_line_id" optional="hide"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
@@ -69,6 +69,12 @@ class ReworkWizard(models.TransientModel):
|
||||
lambda ap: ap.processing_panel == panel.name and ap.state != 'rework')
|
||||
if panel_workorder:
|
||||
panel_workorder.write({'state': 'rework'})
|
||||
panel_workorder.filtered(
|
||||
lambda wo: wo.routing_type == '装夹预调').workpiece_delivery_ids.filtered(
|
||||
lambda wd: wd.status == '待下发').write({'status': '已取消'})
|
||||
# workpiece = self.env['sf.workpiece.delivery'].search([('status', '=', '待下发'), (
|
||||
# 'workorder_id', '=',
|
||||
# panel_workorder.filtered(lambda wd: wd.routing_type == '装夹预调').id)])
|
||||
product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search(
|
||||
[('product_model_type_id', '=', self.production_id.product_id.product_model_type_id.id)],
|
||||
order='sequence asc'
|
||||
@@ -137,7 +143,7 @@ class ReworkWizard(models.TransientModel):
|
||||
ret),
|
||||
'cmm_ids': new_cnc_workorder.cmm_ids.sudo()._json_cmm_program(panel.name,
|
||||
ret),
|
||||
'cnc_worksheet': new_cnc_workorder.cnc_worksheet})
|
||||
'cnc_worksheet': cnc_rework.cnc_worksheet})
|
||||
new_pre_workorder = self.production_id.workorder_ids.filtered(lambda
|
||||
p: p.routing_type == '装夹预调' and p.processing_panel == panel.name and p.state not in (
|
||||
'rework', 'done'))
|
||||
|
||||
@@ -819,7 +819,7 @@ class FunctionalToolDismantle(models.Model):
|
||||
integral_lot_id = fields.Many2one('stock.lot', string='整体式刀具批次', compute='_compute_functional_tool_num',
|
||||
store=True)
|
||||
integral_freight_id = fields.Many2one('sf.shelf.location', '整体式刀具目标货位',
|
||||
domain="[('product_id', 'in', (integral_product_id, False)),('location_id.name', '=', '刀具房')]")
|
||||
domain="[('product_id', 'in', (integral_product_id, False)),('rotative_Boolean', '=', True)]")
|
||||
|
||||
# 刀片
|
||||
blade_product_id = fields.Many2one('product.product', string='刀片', compute='_compute_functional_tool_num',
|
||||
@@ -829,7 +829,7 @@ class FunctionalToolDismantle(models.Model):
|
||||
blade_brand_id = fields.Many2one('sf.machine.brand', string='刀片品牌', related='blade_product_id.brand_id')
|
||||
blade_lot_id = fields.Many2one('stock.lot', string='刀片批次', compute='_compute_functional_tool_num', store=True)
|
||||
blade_freight_id = fields.Many2one('sf.shelf.location', '刀片目标货位',
|
||||
domain="[('product_id', 'in', (blade_product_id, False)),('location_id.name', '=', '刀具房')]")
|
||||
domain="[('product_id', 'in', (blade_product_id, False)),('rotative_Boolean', '=', True)]")
|
||||
|
||||
# 刀杆
|
||||
bar_product_id = fields.Many2one('product.product', string='刀杆', compute='_compute_functional_tool_num',
|
||||
@@ -839,7 +839,7 @@ class FunctionalToolDismantle(models.Model):
|
||||
bar_brand_id = fields.Many2one('sf.machine.brand', string='刀杆品牌', related='bar_product_id.brand_id')
|
||||
bar_lot_id = fields.Many2one('stock.lot', string='刀杆批次', compute='_compute_functional_tool_num', store=True)
|
||||
bar_freight_id = fields.Many2one('sf.shelf.location', '刀杆目标货位',
|
||||
domain="[('product_id', 'in', (bar_product_id, False)),('location_id.name', '=', '刀具房')]")
|
||||
domain="[('product_id', 'in', (bar_product_id, False)),('rotative_Boolean', '=', True)]")
|
||||
|
||||
# 刀盘
|
||||
pad_product_id = fields.Many2one('product.product', string='刀盘', compute='_compute_functional_tool_num',
|
||||
@@ -849,7 +849,7 @@ class FunctionalToolDismantle(models.Model):
|
||||
pad_brand_id = fields.Many2one('sf.machine.brand', string='刀盘品牌', related='pad_product_id.brand_id')
|
||||
pad_lot_id = fields.Many2one('stock.lot', string='刀盘批次', compute='_compute_functional_tool_num', store=True)
|
||||
pad_freight_id = fields.Many2one('sf.shelf.location', '刀盘目标货位',
|
||||
domain="[('product_id', 'in', (pad_product_id, False)),('location_id.name', '=', '刀具房')]")
|
||||
domain="[('product_id', 'in', (pad_product_id, False)),('rotative_Boolean', '=', True)]")
|
||||
|
||||
# 夹头
|
||||
chuck_product_id = fields.Many2one('product.product', string='夹头', compute='_compute_functional_tool_num',
|
||||
@@ -859,7 +859,7 @@ class FunctionalToolDismantle(models.Model):
|
||||
chuck_brand_id = fields.Many2one('sf.machine.brand', string='夹头品牌', related='chuck_product_id.brand_id')
|
||||
chuck_lot_id = fields.Many2one('stock.lot', string='夹头批次', compute='_compute_functional_tool_num', store=True)
|
||||
chuck_freight_id = fields.Many2one('sf.shelf.location', '夹头目标货位',
|
||||
domain="[('product_id', 'in', (chuck_product_id, False)),('location_id.name', '=', '刀具房')]")
|
||||
domain="[('product_id', 'in', (chuck_product_id, False)),('rotative_Boolean', '=', True)]")
|
||||
|
||||
@api.onchange('functional_tool_id')
|
||||
def _onchange_freight(self):
|
||||
|
||||
@@ -254,6 +254,7 @@ class SfShelf(models.Model):
|
||||
shelf_height = fields.Float(string='货架高度(m)')
|
||||
shelf_layer = fields.Integer(string='货架层数')
|
||||
layer_capacity = fields.Integer(string='层数容量')
|
||||
shelf_rotative_Boolean = fields.Boolean('循环货架', default=False)
|
||||
|
||||
# 是否有货位
|
||||
is_there_area = fields.Boolean(string='是否有货位', compute='_compute_is_there_area', default=False, store=True)
|
||||
@@ -361,6 +362,7 @@ class ShelfLocation(models.Model):
|
||||
|
||||
name = fields.Char('货位名称', required=True, size=20)
|
||||
barcode = fields.Char('货位编码', copy=False, size=50)
|
||||
rotative_Boolean = fields.Boolean('循环货位', related='shelf_id.shelf_rotative_Boolean', store=True)
|
||||
qr_code = fields.Binary(string='二维码', compute='_compute_location_qr_code', store=True)
|
||||
|
||||
# 货架
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<field name="shelf_height" string="货架高度(m)"/>
|
||||
<field name="shelf_layer" string="货架层数"/>
|
||||
<field name="layer_capacity" string="层数容量"/>
|
||||
<field name="shelf_rotative_Boolean"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="货位">
|
||||
@@ -169,6 +170,7 @@
|
||||
<group>
|
||||
<field name="barcode" readonly="1"/>
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="rotative_Boolean" invisible="1"/>
|
||||
<field name="shelf_id" readonly="1"/>
|
||||
<field name="location_id" readonly="1"/>
|
||||
<field name="product_id"/>
|
||||
|
||||
Reference in New Issue
Block a user