diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index e542002c..7b050139 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -110,15 +110,15 @@ class Manufacturing_Connect(http.Controller): logging.info('RfidCode:%s' % ret['RfidCode']) if 'RfidCode' in ret: workorder = request.env['mrp.workorder'].sudo().search( - [('routing_type', '=', '前置三元定位检测'), ('rfid_code', '=', ret['RfidCode'])]) + [('routing_type', '=', '装夹预调'), ('rfid_code', '=', ret['RfidCode'])]) if workorder: for item in workorder: if item.material_center_point: - offset = item.material_center_point.strip('()').split(',') + offset = item.material_center_point[1:-1].split(",") res['Datas'].append({ 'XOffset': 0 if not item.material_center_point else offset[0], '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 }) else: @@ -195,21 +195,6 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) - if not ret['BillId']: - res = {'Succeed': False, 'ErrorCode': 202, 'Error': '未传制造订单号'} - return json.JSONEncoder().encode(res) - if not ret['CraftId']: - res = {'Succeed': False, 'ErrorCode': 202, 'Error': '未传工序名称'} - return json.JSONEncoder().encode(res) - if not ret['DeviceId']: - res = {'Succeed': False, 'ErrorCode': 202, 'Error': '未传设备号'} - return json.JSONEncoder().encode(res) - if not ret['Quality']: - res = {'Succeed': False, 'ErrorCode': 202, 'Error': '未传检测结果'} - return json.JSONEncoder().encode(res) - if not ret['ReportPaht']: - res = {'Succeed': False, 'ErrorCode': 202, 'Error': '未传检查报告文件(地址)'} - return json.JSONEncoder().encode(res) production_id = ret['BillId'] routing_type = ret['CraftId'] request.env['mrp.workorder'].sudo().search( @@ -219,6 +204,44 @@ class Manufacturing_Connect(http.Controller): logging.info('PartQualityInspect error:%s' % e) 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, cors="*") def NCProgDolod(self, **kw): @@ -258,9 +281,11 @@ class Manufacturing_Connect(http.Controller): logging.info('NCProgDolod error:%s' % e) return json.JSONEncoder().encode(res) - @http.route('/AutoDeviceApi/LocationChange', type='json', auth='none', methods=['GET', 'POST'], csrf=False, + + @http.route('/AutoDeviceApi/LocationChange', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, cors="*") - def LocationChange(self, **kw): + def NCProgDolod(self, **kw): + """ 库位变更 :param kw: @@ -281,6 +306,3 @@ class Manufacturing_Connect(http.Controller): logging.info('NCProgDolod error:%s' % e) return json.JSONEncoder().encode(res) - - - diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index f349b6e0..056ef240 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -97,7 +97,8 @@ class ResMrpWorkOrder(models.Model): X_deviation_angle = fields.Integer(string="X轴偏差度", default=0) test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格', 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="托盘编码") glb_file = fields.Binary("glb模型文件") is_subcontract = fields.Boolean(string='是否外协') @@ -130,7 +131,6 @@ class ResMrpWorkOrder(models.Model): total_wight = fields.Float(string="总重量") maximum_carrying_weight = fields.Char(string="最大承载重量[kg]") maximum_clamping_force = fields.Char(string="最大夹持力[n]") - production_line_id = fields.Many2one('sf.production.line', string="生产线") preset_program_information = fields.Char(string="预调程序信息") workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'workorder_id', '工件配送') 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) else: 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="工单") + + diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv index fb218c88..c3fceb02 100644 --- a/sf_manufacturing/security/ir.model.access.csv +++ b/sf_manufacturing/security/ir.model.access.csv @@ -1,6 +1,8 @@ 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_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_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 @@ -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_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_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 diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 78313ad2..2531b7f7 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -461,6 +461,15 @@ + + + + + + + + +