Compare commits

...

9 Commits

Author SHA1 Message Date
yuxianghui
6405944cf1 1、优化功能刀具清单查询接口,新增功能刀具查询接口。 2024-05-30 15:22:30 +08:00
jinling.yang
caf7aaa560 Merge branch 'master' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf 2024-05-29 12:50:44 +08:00
jinling.yang
ab2978b4ab Merge branch 'hotfix/修复编程单下发接口' 2024-05-29 12:50:04 +08:00
马广威
0b9c856d56 Accept Merge Request #1050: (release/release_1_1 -> master)
Merge Request: hotfix工厂环境问题,详见描述

Created By: @马广威
Accepted By: @马广威
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1050?initial=true
2024-05-29 12:47:10 +08:00
jinling.yang
66dc7b540c Merge branch 'hotfix/修复编程单下发接口' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into release/release_1_1 2024-05-29 12:44:06 +08:00
jinling.yang
decfd27401 1.修复cnc工单没有程序文件路径
2.修复编程单已下发,在工件配送时,提示未下发nc程序
2024-05-29 12:41:55 +08:00
yuxianghui
f71d62dad1 优化工单工序 2024-05-29 11:26:17 +08:00
yuxianghui
b7a11f0abe 修复 【制造订单的工单顺序错误,需排查处理bug】 问题 2024-05-29 09:34:41 +08:00
马广威
8ced717b1c Accept Merge Request #1037: (release/release1.0 -> master)
Merge Request: master_sf_2.0

Created By: @马广威
Accepted By: @马广威
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1037?initial=true
2024-05-18 22:44:11 +08:00
4 changed files with 95 additions and 19 deletions

View File

@@ -5,7 +5,7 @@ import re
import requests
from itertools import groupby
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.exceptions import UserError,ValidationError
from odoo.addons.sf_base.commons.common import Common
from odoo.tools import float_compare, float_round, float_is_zero, format_datetime
@@ -483,10 +483,49 @@ class MrpProduction(models.Model):
def _reset_work_order_sequence(self):
for rec in self:
current_sequence = 1
sequence_list = {}
model_type_id = rec.product_id.product_model_type_id
if model_type_id:
tmpl_num = 1
# 成品工序
product_routing_tmpl_ids = model_type_id.product_routing_tmpl_ids
if product_routing_tmpl_ids:
for tmpl_id in product_routing_tmpl_ids:
sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
tmpl_num += 1
# 表面工艺工序
# 模型类型的表面工艺工序模版
surface_tmpl_ids = model_type_id.surface_technics_routing_tmpl_ids
# 产品选择的表面工艺
model_process_parameters_ids = rec.product_id.model_process_parameters_ids
process_dict = {}
if model_process_parameters_ids:
for process_parameters_id in model_process_parameters_ids:
process_id = process_parameters_id.process_id
for surface_tmpl_id in surface_tmpl_ids:
if process_id == surface_tmpl_id.route_workcenter_id.surface_technics_id:
surface_tmpl_name = surface_tmpl_id.route_workcenter_id.name
process_dict.update({int(process_id.category_id.code): '%s-%s' % (
surface_tmpl_name, process_parameters_id.name)})
process_list = sorted(process_dict.keys())
for process_num in process_list:
sequence_list.update({process_dict.get(process_num): tmpl_num})
tmpl_num += 1
# 坯料工序
tmpl_num = 1
embryo_routing_tmpl_ids = model_type_id.embryo_routing_tmpl_ids
if embryo_routing_tmpl_ids:
for tmpl_id in embryo_routing_tmpl_ids:
sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
tmpl_num += 1
else:
raise ValidationError('该产品没有选择【模版类型】!')
for work in rec.workorder_ids:
work.sequence = current_sequence
current_sequence += 1
if sequence_list.get(work.name):
work.sequence = sequence_list[work.name]
else:
raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name)
# if work.name == '获取CNC加工程序':
# work.button_start()
# #work.fetchCNC()

View File

@@ -964,7 +964,7 @@ class CNCprocessing(models.Model):
_order = 'sequence_number,id'
cnc_id = fields.Many2one('ir.attachment')
sequence_number = fields.Char('序号')
sequence_number = fields.Integer('序号')
program_name = fields.Char('程序名')
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
cutting_tool_name = fields.Char('刀具名称')
@@ -1026,6 +1026,8 @@ class CNCprocessing(models.Model):
'cutting_tool_extension_length': obj['cutting_tool_extension_length'],
'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
'estimated_processing_time': obj['estimated_processing_time'],
'program_path': obj['program_path'],
'cnc_id': obj['cnc_id'].id,
'remark': obj['remark']
})
return cnc_processing_str
@@ -1416,7 +1418,7 @@ class WorkPieceDelivery(models.Model):
'task_delivery_time': fields.Datetime.now(),
'status': '待配送'
})
if delivery_item == "上产线":
if delivery_item.type == "上产线":
delivery_item.workorder_id.write({'is_delivery': True})
else:
raise UserError(ret['message'])

View File

@@ -63,12 +63,16 @@ class Sf_Mrs_Connect(http.Controller):
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:
if (cnc_program and cnc_processing_arr) or (not cnc_program and cnc_processing_arr):
logging.info('cnc_processing_arr:%s' % cnc_processing_arr)
if cnc_program and cnc_processing_arr:
cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'})
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 b: b.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)])

View File

@@ -8,31 +8,62 @@ from odoo.http import request
class Manufacturing_Connect(http.Controller):
@http.route('/AutoDeviceApi/ToolGroup', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
@http.route('/AutoDeviceApi/ToolInventory', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
cors="*")
def get_functional_tool_groups_Info(self, **kw):
def get_functional_tool_inventory_Info(self, **kw):
"""
刀具组接口
功能刀具清单接口
:param kw:
:return:
"""
logging.info('get_functional_tool_groups_Info:%s' % kw)
logging.info('get_functional_tool_inventory_Info:%s' % kw)
try:
datas = request.httprequest.data
ret = json.loads(datas)
# ret = json.loads(ret['result'])
logging.info('DeviceId:%s' % ret)
functional_tools = request.env['sf.tool.inventory'].sudo().search([])
tool_inventory = request.env['sf.tool.inventory'].sudo().search([])
res = {'Succeed': True, 'Datas': []}
if tool_inventory:
for item in tool_inventory:
res['Datas'].append({
'ToolName': item.name,
'GroupName': item.tool_groups_id.name,
'Lifetime': item.life_span
})
except Exception as e:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
logging.info('get_functional_tool_inventory_Info error:%s' % e)
return json.JSONEncoder().encode(res)
@http.route('/AutoDeviceApi/ToolEntity', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
cors="*")
def get_functional_tool_entity_Info(self, **kw):
"""
功能刀具列表接口
:param kw:
:return:
"""
logging.info('get_functional_tool_entity_Info:%s' % kw)
try:
datas = request.httprequest.data
ret = json.loads(datas)
# ret = json.loads(ret['result'])
logging.info('DeviceId:%s' % ret)
functional_tools = request.env['sf.functional.cutting.tool.entity'].sudo().search([])
res = {'Succeed': True, 'Datas': []}
if functional_tools:
for item in functional_tools:
res['Datas'].append({
'Rfid': item.rfid,
'ToolName': item.tool_name_id.name,
'GroupName': item.tool_groups_id.name,
'ToolId': item.functional_cutting_tool_model_id.name,
'ToolName': item.name
'MaxLifetime': item.max_lifetime_value,
'KnifeHandle': item.cutting_tool_cutterhandle_model_id.name
})
except Exception as e:
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
logging.info('get_functional_tool_groups_Info error:%s' % e)
logging.info('get_functional_tool_entity_Info error:%s' % e)
return json.JSONEncoder().encode(res)