Files
jikimo_sf/sf_mrs_connect/controllers/controllers.py
2024-06-19 17:35:13 +08:00

124 lines
7.6 KiB
Python

# -*- coding: utf-8 -*-
import logging
import os
import json
import base64
from odoo import http
from odoo.http import request
class Sf_Mrs_Connect(http.Controller):
@http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
cors="*")
def get_cnc_processing_create(self, **kw):
"""
获取mrs下发的编程单
:param kw:
:return:
"""
logging.info('get_cnc_processing_create:%s' % kw)
try:
res = {'status': 1, 'message': '成功'}
datas = request.httprequest.data
ret = json.loads(datas)
ret = json.loads(ret['result'])
logging.info('下发编程单:%s' % ret)
all_production = None
is_delete_file = False
# 查询状态为进行中且类型为获取CNC加工程序的工单
cnc_production = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'].split(',')[0])])
cnc_program = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search(
[('programming_no', '=', cnc_production.programming_no), ('id', '!=', cnc_production.id)])
if cnc_production.workorder_ids.filtered(lambda a: a.routing_type == 'CNC加工').cnc_ids:
is_delete_file = True
cnc_production.workorder_ids.filtered(
lambda a1: a1.routing_type == 'CNC加工').cnc_ids.sudo().unlink()
request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(cnc_production)
if cnc_program.workorder_ids.filtered(lambda c: c.routing_type == 'CNC加工').cnc_ids:
cnc_program.workorder_ids.filtered(
lambda c1: c1.routing_type == 'CNC加工').cnc_ids.sudo().unlink()
request.env['sf.cam.work.order.program.knife.plan'].sudo().unlink_cam_plan(cnc_program)
# cnc_program = request.env['mrp.production'].with_user(
# request.env.ref("base.user_admin")).search([('programming_no', '=', cnc_production.programming_no)])
logging.info('制造订单号:%s' % cnc_production.name)
if cnc_production:
# if ret['glb_file']:
# cnc_production.glb_file = base64.b64encode(ret['glb_file'])
# 拉取所有加工面的程序文件
# for r in ret['processing_panel'].split(','):
# if is_delete_file is True:
# program_path_tmp_r = os.path.join('/tmp', ret['folder_name'], 'return', r)
# files_r = os.listdir(program_path_tmp_r)
# if files_r:
# for file_name in files_r:
# file_path = os.path.join(program_path_tmp_r, file_name)
# os.remove(file_path)
# download_state = request.env['sf.cnc.processing'].with_user(
# request.env.ref("base.user_admin")).download_file_tmp(
# ret['folder_name'], r)
# if download_state == 0:
# res['status'] = -2
# res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.name)
# return json.JSONEncoder().encode(res)
logging.info('创建cnc工单')
cnc_processing_arr = []
cmm_program_arr = []
for panel in ret['processing_panel'].split(','):
program_path_tmp = os.path.join('/tmp', ret['folder_name'], 'return', panel)
# program_path_tmp = "C://Users//43484//Desktop//机企猫工作文档//其他//model_analysis"
files = os.listdir(program_path_tmp)
cnc_processing_arr = []
for f in files:
program_path = os.path.join(program_path_tmp, f)
logging.info('cnc程序路径 :%s' % program_path)
if f.endswith(".doc"):
# 插入cmm程序数据
cmm_program = request.env['sf.cmm.program'].with_user(
request.env.ref("base.user_admin")).cmm_program_create(ret, program_path, program_path_tmp)
cnc_processing = request.env['sf.cnc.processing'].with_user(
request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret, program_path,
program_path_tmp)
logging.info('cnc_processing111:%s' % cnc_processing)
if cnc_processing:
cnc_processing_arr.append(cnc_processing._json_cnc_processing(cnc_processing))
if (cnc_program and cnc_processing_arr) or (not cnc_program and cnc_processing_arr):
productions = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search(
[('programming_no', '=', cnc_production.programming_no)])
if productions:
if not productions.workorder_ids:
productions.product_id.model_processing_panel = ret['processing_panel']
productions._create_workorder(ret)
# cnc_workorder = productions.workorder_ids.filtered(lambda g: g.routing_type == '装夹预调')
# cnc_production.workorder_ids.filtered(lambda g: g.routing_type == '装夹预调').write(
# {'processing_drawing': cnc_production.workorder_ids.filtered(
# lambda g1: g1.routing_type == 'CNC加工').cnc_worksheet})
# if cnc_program and cnc_processing_arr:
# cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'})
# cnc_program.workorder_ids.filtered(lambda d: d.routing_type == '装夹预调').write(
# {'processing_drawing': cnc_production.workorder_ids.filtered(
# lambda d1: d1.routing_type == 'CNC加工').cnc_worksheet})
# cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write(
# {'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered(
# lambda b1: b1.routing_type == 'CNC加工').cnc_worksheet})
# cnc_program |= cnc_production
# if not cnc_program and cnc_processing_arr:
# cnc_program = cnc_production
# cnc_program_ids = [item.id for item in cnc_program]
# workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search(
# [('production_id', 'in', cnc_program_ids)])
# if workpiece_delivery:
# workpiece_delivery.write({'is_cnc_program_down': True})
return json.JSONEncoder().encode(res)
else:
res = {'status': 0, 'message': '该制造订单暂未开始'}
return json.JSONEncoder().encode(res)
except Exception as e:
res = {'status': -1, 'message': '系统解析失败'}
logging.info('get_cnc_processing_create error:%s' % e)
return json.JSONEncoder().encode(res)