1.1修复排程工件配送没有目的生产线2.注释获取cnc程序最新代码(第二期)3.优化部分页面
This commit is contained in:
@@ -111,11 +111,12 @@ class Sf_Bf_Connect(http.Controller):
|
||||
res['message'] = '该订单模型的材料型号在您分配的工厂里暂未设置获取方式和供应商,请先配置再进行分配'
|
||||
request.cr.rollback()
|
||||
return json.JSONEncoder().encode(res)
|
||||
# 产品配置bom
|
||||
product_bom_purchase = request.env['mrp.bom'].with_user(
|
||||
request.env.ref("base.user_admin")).bom_create(product, 'normal', False)
|
||||
product_bom_purchase.with_user(request.env.ref("base.user_admin")).bom_create_line_has(
|
||||
purchase_embryo)
|
||||
else:
|
||||
# 产品配置bom
|
||||
product_bom_purchase = request.env['mrp.bom'].with_user(
|
||||
request.env.ref("base.user_admin")).bom_create(product, 'normal', False)
|
||||
product_bom_purchase.with_user(request.env.ref("base.user_admin")).bom_create_line_has(
|
||||
purchase_embryo)
|
||||
order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item)
|
||||
i += 1
|
||||
res['factory_order_no'] = order_id.name
|
||||
|
||||
@@ -511,7 +511,6 @@ class Manufacturing_Connect(http.Controller):
|
||||
rfid_code = ret[f'RfidCode{i}']
|
||||
logging.info('RfidCode:%s' % rfid_code)
|
||||
domain = [
|
||||
('feeder_station_start_id.name', '=', ret['DeviceId']),
|
||||
('workorder_id.rfid_code', '=', rfid_code),
|
||||
('status', '=', '待下发'),
|
||||
('type', '=', '下产线')
|
||||
|
||||
@@ -154,7 +154,7 @@ class MrpProduction(models.Model):
|
||||
production.maintenance_count = len(production.request_ids)
|
||||
|
||||
# cnc程序获取
|
||||
def fetchCNC(self, production_names):
|
||||
def fetchCNC(self):
|
||||
cnc = self.env['mrp.production'].search([('id', '=', self.id)])
|
||||
quick_order = self.env['quick.easy.order'].search(
|
||||
[('name', '=', cnc.product_id.default_code.rsplit('-', 1)[0])])
|
||||
@@ -166,25 +166,26 @@ class MrpProduction(models.Model):
|
||||
if quick_order:
|
||||
programme_way = 'manual operation'
|
||||
try:
|
||||
res = {'model_code': cnc.product_id.name,
|
||||
'production_no': production_names,
|
||||
'machine_tool_code': "",
|
||||
'material_code': self.env['sf.production.materials'].search(
|
||||
[('id', '=', cnc.product_id.materials_id.id)]).materials_no,
|
||||
'material_type_code': self.env['sf.materials.model'].search(
|
||||
[('id', '=', cnc.product_id.materials_type_id.id)]).materials_no,
|
||||
'machining_processing_panel': cnc.product_id.model_processing_panel,
|
||||
'machining_precision': cnc.product_id.model_machining_precision,
|
||||
'embryo_long': cnc.product_id.bom_ids.bom_line_ids.product_id.length,
|
||||
'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height,
|
||||
'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width,
|
||||
'order_no': cnc.origin,
|
||||
'model_order_no': cnc.product_id.default_code,
|
||||
'user': cnc.env.user.name,
|
||||
'programme_way': programme_way,
|
||||
'model_file': '' if not cnc.product_id.model_file else base64.b64encode(
|
||||
cnc.product_id.model_file).decode('utf-8')
|
||||
}
|
||||
res = {
|
||||
'production_no': cnc.name,
|
||||
'machine_tool_code': '',
|
||||
'model_code': cnc.product_id.model_code,
|
||||
'material_code': self.env['sf.production.materials'].search(
|
||||
[('id', '=', cnc.product_id.materials_id.id)]).materials_no,
|
||||
'material_type_code': self.env['sf.materials.model'].search(
|
||||
[('id', '=', cnc.product_id.materials_type_id.id)]).materials_no,
|
||||
'machining_processing_panel': cnc.product_id.model_processing_panel,
|
||||
'machining_precision': cnc.product_id.model_machining_precision,
|
||||
'embryo_long': cnc.product_id.bom_ids.bom_line_ids.product_id.length,
|
||||
'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height,
|
||||
'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width,
|
||||
'order_no': cnc.origin,
|
||||
'model_order_no': cnc.product_id.default_code,
|
||||
'user': cnc.env.user.name,
|
||||
'programme_way': programme_way,
|
||||
'model_file': '' if not cnc.product_id.model_file else base64.b64encode(
|
||||
cnc.product_id.model_file).decode('utf-8')
|
||||
}
|
||||
# 打印出除了 model_file 之外的所有键值对
|
||||
for key, value in res.items():
|
||||
if key != 'model_file':
|
||||
@@ -266,15 +267,15 @@ class MrpProduction(models.Model):
|
||||
# 其他规则限制: 默认只分配给工作中心状态为非故障的工作中心;
|
||||
|
||||
def _create_workorder3(self):
|
||||
production_names = [production.name for production in self if production.product_id.categ_id.type == '成品']
|
||||
programming_no = None
|
||||
product_first = None
|
||||
# production_names = [production.name for production in self if production.product_id.categ_id.type == '成品']
|
||||
# programming_no = None
|
||||
# product_first = None
|
||||
for production in self:
|
||||
if not production.bom_id or not production.product_id:
|
||||
continue
|
||||
workorders_values = []
|
||||
if product_first is None:
|
||||
product_first = production.product_id
|
||||
# if product_first is None:
|
||||
# product_first = production.product_id
|
||||
|
||||
product_qty = production.product_uom_id._compute_quantity(production.product_qty,
|
||||
production.bom_id.product_uom_id)
|
||||
@@ -299,13 +300,15 @@ class MrpProduction(models.Model):
|
||||
'state': 'pending',
|
||||
}]
|
||||
if production.product_id.categ_id.type == '成品':
|
||||
if programming_no is None:
|
||||
production.fetchCNC(production_names)
|
||||
programming_no = production.programming_no
|
||||
else:
|
||||
if production.product_id == product_first:
|
||||
if not production.programming_no:
|
||||
production.write({'programming_no': programming_no, 'programming_state': '编程中'})
|
||||
production.fetchCNC()
|
||||
# 第二期同一个产品多个制造订单对应一个编程单和模型库
|
||||
# if programming_no is None:
|
||||
# production.fetchCNC(production_names)
|
||||
# programming_no = production.programming_no
|
||||
# else:
|
||||
# if production.product_id == product_first:
|
||||
# if not production.programming_no:
|
||||
# production.write({'programming_no': programming_no, 'programming_state': '编程中'})
|
||||
# 根据加工面板的面数及对应的工序模板生成工单
|
||||
i = 0
|
||||
processing_panel_len = len(production.product_id.model_processing_panel.split(','))
|
||||
|
||||
@@ -827,8 +827,6 @@ class ResMrpWorkOrder(models.Model):
|
||||
raise UserError("请对前置三元检测定位参数进行计算定位")
|
||||
if not record.rfid_code:
|
||||
raise UserError("请扫RFID码进行绑定")
|
||||
record.workpiece_delivery_ids[0].write({'status': '待下发'})
|
||||
|
||||
if record.routing_type == '解除装夹':
|
||||
'''
|
||||
记录结束时间
|
||||
@@ -895,13 +893,17 @@ class ResMrpWorkOrder(models.Model):
|
||||
|
||||
# 根据中控系统提供的检测文件地址去ftp里对应的制造订单里获取
|
||||
def get_detection_file(self, workorder, reportPath):
|
||||
if reportPath.startswith('/'):
|
||||
reportPath = reportPath[4:]
|
||||
serverdir = os.path.join('/tmp', reportPath)
|
||||
# if reportPath.startswith('/'):
|
||||
# reportPath = reportPath[4:]
|
||||
# serverdir = os.path.join('/tmp', reportPath)
|
||||
serverdir = '/tmp' + reportPath
|
||||
logging.info('get_detection_file-serverdir:%s' % serverdir)
|
||||
serverdir_prefix = os.path.dirname(serverdir)
|
||||
logging.info('serverdir_prefix-serverdir:%s' % serverdir_prefix)
|
||||
for root, dirs, files in os.walk(serverdir_prefix):
|
||||
for filename in files:
|
||||
logging.info('filename:%s' % filename)
|
||||
logging.info('reportPath:%s' % os.path.basename(reportPath))
|
||||
if filename == os.path.basename(reportPath):
|
||||
report_file_path = os.path.join(root, filename)
|
||||
logging.info('get_detection_file-report_file_path:%s' % report_file_path)
|
||||
@@ -1290,7 +1292,7 @@ class WorkPieceDelivery(models.Model):
|
||||
'default_type': production_type,
|
||||
}}
|
||||
else:
|
||||
if self.type == '运送空料架':
|
||||
if production_type == '运送空料架':
|
||||
raise UserError("您所选择的【任务路线】的【终点接驳站】已占用,请在该接驳站空闲时进行配送")
|
||||
else:
|
||||
raise UserError(
|
||||
@@ -1330,11 +1332,13 @@ class WorkPieceDelivery(models.Model):
|
||||
if route_id is None:
|
||||
route_id = item.route_id.id
|
||||
if feeder_station_start is None:
|
||||
feeder_station_start = item.feeder_station_start_id.name
|
||||
feeder_station_start = item.feeder_station_start_id
|
||||
if feeder_station_destination is None:
|
||||
feeder_station_destination = item.feeder_station_destination_id.name
|
||||
feeder_station_destination = item.feeder_station_destination_id
|
||||
if item.type in ['上产线', '下产线']:
|
||||
item.route_id = route_id
|
||||
item.feeder_station_start_id = feeder_station_start.id
|
||||
item.feeder_station_destination_id = feeder_station_destination.id
|
||||
delivery_Arr.append(item.name)
|
||||
else:
|
||||
self = self.create(
|
||||
@@ -1346,12 +1350,12 @@ class WorkPieceDelivery(models.Model):
|
||||
delivery_str = ','.join(map(str, delivery_Arr))
|
||||
if feeder_station_start is not None:
|
||||
positionCode_Arr.append({
|
||||
'positionCode': feeder_station_start,
|
||||
'positionCode': feeder_station_start.name,
|
||||
'code': '00'
|
||||
})
|
||||
if feeder_station_destination is not None:
|
||||
positionCode_Arr.append({
|
||||
'positionCode': feeder_station_destination,
|
||||
'positionCode': feeder_station_destination.name,
|
||||
'code': '00'
|
||||
})
|
||||
res = {'reqCode': delivery_str, 'reqTime': '', 'clientCode': '', 'tokenCode': '',
|
||||
|
||||
@@ -608,7 +608,7 @@
|
||||
<field name="production_id"/>
|
||||
<field name="type" readonly="1"/>
|
||||
<field name="production_line_id" options="{'no_create': True}"/>
|
||||
<field name="route_id" options="{'no_create': True}"/>
|
||||
<field name="route_id" options="{'no_create': True}" domain="[('type','in',['上产线','下产线'])]"/>
|
||||
<field name="feeder_station_start_id" readonly="1" force_save="1"/>
|
||||
<field name="feeder_station_destination_id" readonly="1" force_save="1"/>
|
||||
<field name="is_cnc_program_down" readonly="1"/>
|
||||
|
||||
@@ -24,6 +24,7 @@ class FtpController():
|
||||
def file_exists(self, path):
|
||||
# 检查文件是否存在于FTP服务器上
|
||||
try:
|
||||
logging.info("dirname:%s" % os.path.dirname(path))
|
||||
self.ftp.cwd(os.path.dirname(path))
|
||||
files = self.ftp.nlst()
|
||||
return os.path.basename(path) in files
|
||||
@@ -31,6 +32,11 @@ class FtpController():
|
||||
logging.error(f"Error checking file: {e}")
|
||||
return False
|
||||
|
||||
# # 检测字符串的编码
|
||||
# def detect_encoding(self, s):
|
||||
# result = chardet.detect(s)
|
||||
# return result['encoding']
|
||||
|
||||
# 下载目录下的文件
|
||||
def download_file_tree(self, target_dir, serverdir):
|
||||
if not os.path.exists(serverdir):
|
||||
@@ -40,17 +46,13 @@ class FtpController():
|
||||
logging.info('目录:%s' % target_dir)
|
||||
target_dir1 = target_dir.split('/')
|
||||
logging.info('目录1:%s' % target_dir1[1])
|
||||
self.ftp.cwd('NC')
|
||||
self.ftp.cwd('XT_WH_MO_00164')
|
||||
self.ftp.cwd('return')
|
||||
self.ftp.cwd('R')
|
||||
# self.ftp.cwd(target_dir1[1]) # 切换工作路径
|
||||
# logging.info('目录2:%s' % target_dir1[2])
|
||||
# self.ftp.cwd(target_dir1[2]) # 切换工作路径
|
||||
# logging.info('目录3:%s' % target_dir1[3])
|
||||
# self.ftp.cwd(target_dir1[3]) # 切换工作路径
|
||||
# logging.info('目录4:%s' % target_dir1[4])
|
||||
# self.ftp.cwd(target_dir1[4]) # 切换工作路径
|
||||
self.ftp.cwd(target_dir1[1]) # 切换工作路径
|
||||
logging.info('目录2:%s' % target_dir1[2])
|
||||
self.ftp.cwd(target_dir1[2]) # 切换工作路径
|
||||
logging.info('目录3:%s' % target_dir1[3])
|
||||
self.ftp.cwd(target_dir1[3]) # 切换工作路径
|
||||
logging.info('目录4:%s' % target_dir1[4])
|
||||
self.ftp.cwd(target_dir1[4]) # 切换工作路径
|
||||
remotenames = self.ftp.nlst()
|
||||
logging.info('FTP目录文件:%s' % remotenames)
|
||||
for file in remotenames:
|
||||
@@ -88,6 +90,9 @@ class FtpController():
|
||||
return 1
|
||||
except Exception:
|
||||
return 0
|
||||
finally:
|
||||
self.ftp.quit()
|
||||
logging.info("ftp已关闭")
|
||||
|
||||
# 下载指定目录下的指定文件
|
||||
def download_file(self, serverfile, remotefile):
|
||||
|
||||
@@ -229,6 +229,11 @@ class sf_production_plan(models.Model):
|
||||
record.env['mrp.production'].sudo().browse(i).schedule_state = '已排'
|
||||
# record.production_id.date_planned_start = record.date_planned_start
|
||||
# record.production_id.date_planned_finished = record.date_planned_finished
|
||||
record.production_id.production_line_id = record.production_line_id.id
|
||||
record.production_id.workorder_ids.filtered(
|
||||
lambda b: b.routing_type == "装夹预调").workpiece_delivery_ids.write(
|
||||
{'production_line_id': record.production_line_id.id,
|
||||
'plan_start_processing_time': record.date_planned_start})
|
||||
else:
|
||||
raise ValidationError("未找到工单")
|
||||
# record.date_planned_finished = record.date_planned_start + timedelta(days=3)
|
||||
|
||||
Reference in New Issue
Block a user