Accept Merge Request #827: (feature/新增cmm程序 -> develop)
Merge Request: 新增cmm程序及接口 Created By: @杨金灵 Reviewed By: @马广威 Approved By: @马广威 Accepted By: @杨金灵 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/827?initial=true
This commit is contained in:
@@ -110,15 +110,15 @@ class Manufacturing_Connect(http.Controller):
|
|||||||
logging.info('RfidCode:%s' % ret['RfidCode'])
|
logging.info('RfidCode:%s' % ret['RfidCode'])
|
||||||
if 'RfidCode' in ret:
|
if 'RfidCode' in ret:
|
||||||
workorder = request.env['mrp.workorder'].sudo().search(
|
workorder = request.env['mrp.workorder'].sudo().search(
|
||||||
[('routing_type', '=', '前置三元定位检测'), ('rfid_code', '=', ret['RfidCode'])])
|
[('routing_type', '=', '装夹预调'), ('rfid_code', '=', ret['RfidCode'])])
|
||||||
if workorder:
|
if workorder:
|
||||||
for item in workorder:
|
for item in workorder:
|
||||||
if item.material_center_point:
|
if item.material_center_point:
|
||||||
offset = item.material_center_point.strip('()').split(',')
|
offset = item.material_center_point[1:-1].split(",")
|
||||||
res['Datas'].append({
|
res['Datas'].append({
|
||||||
'XOffset': 0 if not item.material_center_point else offset[0],
|
'XOffset': 0 if not item.material_center_point else offset[0],
|
||||||
'YOffset': 0 if not item.material_center_point else offset[1],
|
'YOffset': 0 if not item.material_center_point else offset[1],
|
||||||
'ZOffet': 0 if not item.material_center_point else offset[3],
|
'ZOffet': 0 if not item.material_center_point else offset[2],
|
||||||
'COffset': 'G54' if not item.X_deviation_angle else item.X_deviation_angle
|
'COffset': 'G54' if not item.X_deviation_angle else item.X_deviation_angle
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
@@ -231,6 +231,44 @@ class Manufacturing_Connect(http.Controller):
|
|||||||
logging.info('PartQualityInspect error:%s' % e)
|
logging.info('PartQualityInspect error:%s' % e)
|
||||||
return json.JSONEncoder().encode(res)
|
return json.JSONEncoder().encode(res)
|
||||||
|
|
||||||
|
@http.route('/AutoDeviceApi/CMMProgDolod', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||||||
|
cors="*")
|
||||||
|
def CMMProgDolod(self, **kw):
|
||||||
|
"""
|
||||||
|
中控系统传递RFID编号给MES,获取测量程序文件。Ftp下载文件
|
||||||
|
:param kw:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
logging.info('CMMProgDolod:%s' % kw)
|
||||||
|
try:
|
||||||
|
res = {'Succeed': True, 'Datas': []}
|
||||||
|
datas = request.httprequest.data
|
||||||
|
ret = json.loads(datas)
|
||||||
|
if 'RfidCode' in ret:
|
||||||
|
logging.info('RfidCode:%s' % ret['RfidCode'])
|
||||||
|
workorder = request.env['mrp.workorder'].sudo().search(
|
||||||
|
[('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工')])
|
||||||
|
if workorder:
|
||||||
|
for item in workorder.cmm_ids:
|
||||||
|
if item.program_date is not False:
|
||||||
|
program_date = item.program_date.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
program_date_str = request.env['sf.sync.common'].sudo().get_add_time(program_date)
|
||||||
|
res['Datas'].append({
|
||||||
|
'CraftId': workorder.id,
|
||||||
|
'CraftKey': workorder.name,
|
||||||
|
'ProgramDate': '' if not item.program_date else program_date_str,
|
||||||
|
'ProgramPath': item.program_path,
|
||||||
|
'PostProcessing': item.post_processing_name,
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
res = {'Succeed': False, 'ErrorCode': 203, 'Error': '暂无工单及对应的CNC程序数据'}
|
||||||
|
else:
|
||||||
|
res = {'Succeed': False, 'ErrorCode': 201, 'Error': '未传RfidCode字段'}
|
||||||
|
except Exception as e:
|
||||||
|
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
|
||||||
|
logging.info('CMMProgDolod error:%s' % e)
|
||||||
|
return json.JSONEncoder().encode(res)
|
||||||
|
|
||||||
@http.route('/AutoDeviceApi/NCProgDolod', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
@http.route('/AutoDeviceApi/NCProgDolod', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||||||
cors="*")
|
cors="*")
|
||||||
def NCProgDolod(self, **kw):
|
def NCProgDolod(self, **kw):
|
||||||
@@ -269,3 +307,26 @@ class Manufacturing_Connect(http.Controller):
|
|||||||
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
|
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
|
||||||
logging.info('NCProgDolod error:%s' % e)
|
logging.info('NCProgDolod error:%s' % e)
|
||||||
return json.JSONEncoder().encode(res)
|
return json.JSONEncoder().encode(res)
|
||||||
|
|
||||||
|
@http.route('/AutoDeviceApi/LocationChange', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||||||
|
cors="*")
|
||||||
|
def NCProgDolod(self, **kw):
|
||||||
|
"""
|
||||||
|
库位变更
|
||||||
|
:param kw:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
logging.info('NCProgDolod:%s' % kw)
|
||||||
|
try:
|
||||||
|
res = {'Succeed': True, 'Datas': []}
|
||||||
|
datas = request.httprequest.data
|
||||||
|
ret = json.loads(datas)
|
||||||
|
if ret:
|
||||||
|
print(ret)
|
||||||
|
return json.JSONEncoder().encode(res)
|
||||||
|
else:
|
||||||
|
res = {'Succeed': False, 'ErrorCode': 201, 'Error': '未传RfidCode字段'}
|
||||||
|
except Exception as e:
|
||||||
|
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
|
||||||
|
logging.info('NCProgDolod error:%s' % e)
|
||||||
|
return json.JSONEncoder().encode(res)
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
X_deviation_angle = fields.Integer(string="X轴偏差度", default=0)
|
X_deviation_angle = fields.Integer(string="X轴偏差度", default=0)
|
||||||
test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格',
|
test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格',
|
||||||
string="检测结果")
|
string="检测结果")
|
||||||
cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工")
|
cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工程序")
|
||||||
|
cmm_ids = fields.One2many("sf.cmm.program", 'workorder_id', string="CMM程序")
|
||||||
tray_code = fields.Char(string="托盘编码")
|
tray_code = fields.Char(string="托盘编码")
|
||||||
glb_file = fields.Binary("glb模型文件")
|
glb_file = fields.Binary("glb模型文件")
|
||||||
is_subcontract = fields.Boolean(string='是否外协')
|
is_subcontract = fields.Boolean(string='是否外协')
|
||||||
@@ -130,7 +131,6 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
total_wight = fields.Float(string="总重量")
|
total_wight = fields.Float(string="总重量")
|
||||||
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]")
|
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]")
|
||||||
maximum_clamping_force = fields.Char(string="最大夹持力[n]")
|
maximum_clamping_force = fields.Char(string="最大夹持力[n]")
|
||||||
production_line_id = fields.Many2one('sf.production.line', string="生产线")
|
|
||||||
preset_program_information = fields.Char(string="预调程序信息")
|
preset_program_information = fields.Char(string="预调程序信息")
|
||||||
workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送')
|
workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送')
|
||||||
is_delivery = fields.Boolean('是否配送完成', default=False)
|
is_delivery = fields.Boolean('是否配送完成', default=False)
|
||||||
@@ -865,3 +865,15 @@ class WorkPieceDelivery(models.Model):
|
|||||||
(obj.task_completion_time - obj.task_delivery_time).total_seconds() / 60.0, 2)
|
(obj.task_completion_time - obj.task_delivery_time).total_seconds() / 60.0, 2)
|
||||||
else:
|
else:
|
||||||
obj.delivery_duration = 0.0
|
obj.delivery_duration = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
class CMMprogram(models.Model):
|
||||||
|
_name = 'sf.cmm.program'
|
||||||
|
_description = "CMM程序"
|
||||||
|
|
||||||
|
program_path = fields.Char('程序文件路径')
|
||||||
|
post_processing_name = fields.Char('后处理名称')
|
||||||
|
program_date = fields.Datetime('程序日期')
|
||||||
|
workorder_id = fields.Many2one('mrp.workorder', string="工单")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_sf_cnc_processing,sf_cnc_processing,model_sf_cnc_processing,sf_base.group_sf_mrp_user,1,0,0,0
|
access_sf_cnc_processing,sf_cnc_processing,model_sf_cnc_processing,sf_base.group_sf_mrp_user,1,0,0,0
|
||||||
access_sf_cnc_processing_manager,sf_cnc_processing,model_sf_cnc_processing,sf_base.group_sf_mrp_manager,1,1,1,0
|
access_sf_cnc_processing_manager,sf_cnc_processing,model_sf_cnc_processing,sf_base.group_sf_mrp_manager,1,1,1,0
|
||||||
|
access_sf_cmm_program_group_sf_mrp_user,sf_cmm_program_group_sf_mrp_user,model_sf_cmm_program,sf_base.group_sf_mrp_user,1,0,0,0
|
||||||
|
access_sf_cmm_program_group_sf_mrp_manager,sf_cmm_program_group_sf_mrp_manager,model_sf_cmm_program,sf_base.group_sf_mrp_manager,1,0,0,0
|
||||||
access_sf_model_type,sf_model_type,model_sf_model_type,sf_base.group_sf_mrp_user,1,0,0,0
|
access_sf_model_type,sf_model_type,model_sf_model_type,sf_base.group_sf_mrp_user,1,0,0,0
|
||||||
access_sf_model_type_manager,sf_model_type,model_sf_model_type,sf_base.group_sf_mrp_manager,1,1,1,0
|
access_sf_model_type_manager,sf_model_type,model_sf_model_type,sf_base.group_sf_mrp_manager,1,1,1,0
|
||||||
access_sf_model_type_group_sale_director,sf_model_type_group_sale_director,model_sf_model_type,sf_base.group_sale_director,1,0,0,0
|
access_sf_model_type_group_sale_director,sf_model_type_group_sale_director,model_sf_model_type,sf_base.group_sale_director,1,0,0,0
|
||||||
@@ -119,7 +121,7 @@ access_sf_embryo_model_type_routing_sort,sf.embryo.model.type.routing.sort,model
|
|||||||
access_sf_surface_technics_model_type_routing_sort,sf.surface_technics.model.type.routing.sort,model_sf_surface_technics_model_type_routing_sort,sf_base.group_plan_dispatch,1,0,0,0
|
access_sf_surface_technics_model_type_routing_sort,sf.surface_technics.model.type.routing.sort,model_sf_surface_technics_model_type_routing_sort,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
access_mrp_workcenter_capacity,mrp.workcenter.capacity,mrp.model_mrp_workcenter_capacity,sf_base.group_plan_dispatch,1,0,0,0
|
access_mrp_workcenter_capacity,mrp.workcenter.capacity,mrp.model_mrp_workcenter_capacity,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
access_sf_cnc_processing,sf.cnc.processing,model_sf_cnc_processing,sf_base.group_plan_dispatch,1,0,0,0
|
access_sf_cnc_processing,sf.cnc.processing,model_sf_cnc_processing,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
|
access_sf_cmm_program_group_plan_dispatch,sf_cmm_program_group_plan_dispatch,model_sf_cmm_program,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
|
|
||||||
|
|
||||||
access_mrp_workcenter_productivity,mrp.workcenter.productivity,mrp.model_mrp_workcenter_productivity,sf_base.group_plan_dispatch,1,0,0,0
|
access_mrp_workcenter_productivity,mrp.workcenter.productivity,mrp.model_mrp_workcenter_productivity,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
|
|||||||
|
@@ -461,6 +461,15 @@
|
|||||||
<field name="cnc_worksheet" string="工作指令" widget="pdf_viewer"/>
|
<field name="cnc_worksheet" string="工作指令" widget="pdf_viewer"/>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
|
<page string="CMM程序" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>
|
||||||
|
<field name="cmm_ids" widget="one2many" string="CMM程序">
|
||||||
|
<tree>
|
||||||
|
<field name="program_path"/>
|
||||||
|
<field name="program_date"/>
|
||||||
|
<field name="post_processing_name"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//page[1]" position="before">
|
<xpath expr="//page[1]" position="before">
|
||||||
<page string="解除装夹" attrs='{"invisible": [("routing_type","!=","解除装夹")]}'>
|
<page string="解除装夹" attrs='{"invisible": [("routing_type","!=","解除装夹")]}'>
|
||||||
|
|||||||
Reference in New Issue
Block a user