@@ -1506,149 +1506,149 @@ class SyncMulti_Mounting_Type(models.Model):
raise ValidationError ( " 联装类型认证未通过 " )
class SyncFixtureModel( models. Model ) :
_inherit = ' sf.fixture.model '
_description = ' 同步夹具型号列表 '
# class SyncFixtureModel( models.Model) :
# _inherit = ' sf.fixture.model'
# _description = ' 同步夹具型号列表'
url = ' /api/fixture_model/list '
# url = ' /api/fixture_model/list'
# 定时同步夹具型号列表
def sync_fixture_model_yesterday( self ) :
config = self . env [ ' res.config.settings' ] . get_values( )
headers = Common. get_headers( self , config [ ' token ' ] , config [ ' sf_secret_key' ] )
strUrl = config [ ' sf_url ' ] + self . url
r = requests . post ( strUrl , json = { } , data = None , headers= headers )
r = r . json ( )
result = json . loads ( r [ ' result ' ] )
if result[ ' status ' ] == 1 :
if result. get ( ' fixture_model_yesterday_list' ) :
for item in result [ ' fixture_model_yesterday_list' ] :
if item :
fixture_model = self . search ( [ ( " code " , ' = ' , item [ ' code ' ] ) , ( ' active ' , ' in ' , [ True , False ] ) ] )
val = {
" name " : item [ ' name ' ] ,
" code " : item [ ' code ' ] ,
" fixture_material_id" : self . env [ ' sf.fixture.material' ] . search (
[ ( ' code ' , ' = ' , item [ ' fixture_material_code ' ] ) ] ) . id ,
" multi_mounting_type_id" : self . env [ ' sf.multi_mounting.type' ] . search (
[ ( ' code ' , ' = ' , item [ ' multi_mounting_type_code ' ] ) ] ) . id ,
" brand_id" : self . env [ ' sf.machine.brand ' ] . search ( [ ( ' code ' , ' = ' , item [ ' brand_code ' ] ) ] ) . id ,
" model_file" : ' ' if not item [ ' model_file' ] else base64. b64decode( item [ ' model_file ' ] ) ,
" status " : item [ ' status ' ] ,
" active " : item [ ' active ' ] ,
}
if not fixture_model :
self. create( val )
else :
fixture_model. write ( val )
# # 定时同步夹具型号列表
# def sync_fixture_model_yesterday(self) :
# config = self.env[' res.config.settings']. get_values( )
# headers = Common. get_headers(self, config['token'], config[' sf_secret_key'] )
# strUrl = config['sf_url'] + self. url
# r = requests.post(strUrl, json={}, data=None, headers= headers)
# r = r.json( )
# result = json.loads(r['result'] )
# if result['status'] == 1 :
# if result.get(' fixture_model_yesterday_list') :
# for item in result[' fixture_model_yesterday_list'] :
# if item:
# fixture_model = self.search([("code", '=', item['code']), ('active', 'in', [True, False])] )
# val = {
# "name": item['name'] ,
# "code": item['code'] ,
# " fixture_material_id": self.env[' sf.fixture.material']. search(
# [('code', '=', item['fixture_material_code'])]).id ,
# " multi_mounting_type_id": self.env[' sf.multi_mounting.type']. search(
# [('code', '=', item['multi_mounting_type_code'])]).id ,
# " brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id ,
# " model_file": '' if not item[' model_file'] else base64. b64decode(item['model_file']) ,
# "status": item['status'] ,
# "active": item['active'] ,
# }
# if not fixture_model:
# self. create( val)
# else:
# fixture_model.write( val)
else :
raise ValidationError( " 夹具型号认证未通过" )
# else:
# raise ValidationError(" 夹具型号认证未通过" )
# 定时同步所有夹具型号列表
def sync_all_fixture_model( self ) :
config = self . env [ ' res.config.settings' ] . get_values( )
headers = Common. get_headers( self , config [ ' token ' ] , config [ ' sf_secret_key' ] )
strUrl = config [ ' sf_url ' ] + self . url
r = requests . post ( strUrl , json = { } , data = None , headers= headers )
r = r . json ( )
result = json . loads ( r [ ' result ' ] )
# print('result:%s' % result)
if result[ ' status ' ] == 1 :
if result. get ( ' fixture_model_all_list' ) :
for item in result [ ' fixture_model_all_list' ] :
if item :
fixture_model = self . search ( [ ( ' code ' , ' = ' , item [ ' code ' ] ) , ( ' active ' , ' in ' , [ True , False ] ) ] )
val = {
" name " : item [ ' name ' ] ,
" code " : item [ ' code ' ] ,
" fixture_material_id" : self . env [ ' sf.fixture.material' ] . search (
[ ( ' code ' , ' = ' , item [ ' fixture_material_code ' ] ) ] ) . id ,
" multi_mounting_type_id" : self . env [ ' sf.multi_mounting.type' ] . search (
[ ( ' code ' , ' = ' , item [ ' multi_mounting_type_code ' ] ) ] ) . id ,
" brand_id" : self . env [ ' sf.machine.brand ' ] . search ( [ ( ' code ' , ' = ' , item [ ' brand_code ' ] ) ] ) . id ,
" model_file" : ' ' if not item [ ' model_file' ] else base64. b64decode( item [ ' model_file ' ] ) ,
" status " : item [ ' status ' ] ,
" active " : item [ ' active ' ] ,
}
if not fixture_model :
self. create( val )
else :
fixture_model. write ( val )
else :
raise ValidationError( " 夹具型号认证未通过" )
# # 定时同步所有夹具型号列表
# def sync_all_fixture_model(self) :
# config = self.env[' res.config.settings']. get_values( )
# headers = Common. get_headers(self, config['token'], config[' sf_secret_key'] )
# strUrl = config['sf_url'] + self. url
# r = requests.post(strUrl, json={}, data=None, headers= headers)
# r = r.json( )
# result = json.loads(r['result'] )
# # print('result:%s' % result)
# if result['status'] == 1 :
# if result.get(' fixture_model_all_list') :
# for item in result[' fixture_model_all_list'] :
# if item:
# fixture_model = self.search([('code', '=', item['code']), ('active', 'in', [True, False])] )
# val = {
# "name": item['name'] ,
# "code": item['code'] ,
# " fixture_material_id": self.env[' sf.fixture.material']. search(
# [('code', '=', item['fixture_material_code'])]).id ,
# " multi_mounting_type_id": self.env[' sf.multi_mounting.type']. search(
# [('code', '=', item['multi_mounting_type_code'])]).id ,
# " brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id ,
# " model_file": '' if not item[' model_file'] else base64. b64decode(item['model_file']) ,
# "status": item['status'] ,
# "active": item['active'] ,
# }
# if not fixture_model:
# self. create( val)
# else:
# fixture_model.write( val)
# else:
# raise ValidationError(" 夹具型号认证未通过" )
class SyncfixtureMaterialsBasicParameters( models. Model ) :
_inherit = ' sf.fixture.materials.basic.parameters '
_description = ' 同步夹具型号基本参数列表 '
# class SyncfixtureMaterialsBasicParameters( models.Model) :
# _inherit = ' sf.fixture.materials.basic.parameters'
# _description = ' 同步夹具型号基本参数列表'
url = ' /api/fixture_parameters/list '
# url = ' /api/fixture_parameters/list'
# 定时同步夹具型号基本信息
def sync_fixture_materials_basic_parameters_yesterday( self ) :
config = self . env [ ' res.config.settings' ] . get_values( )
headers = Common. get_headers( self , config [ ' token ' ] , config [ ' sf_secret_key' ] )
strUrl = config [ ' sf_url ' ] + self . url
r = requests . post ( strUrl , json = { } , data = None , headers= headers )
r = r . json ( )
result = json . loads ( r [ ' result ' ] )
if result[ ' status ' ] == 1 :
if result. get ( ' fixture_parameters_yesterday_list' ) :
all_list = result . get ( ' fixture_parameters_yesterday_list' )
if all_list. get ( ' zero_chuck_all_list' ) :
self. _write_or_create( all_list. get ( ' zero_chuck_yesterday_list' ) , ' 零点卡盘 ' )
if all_list. get ( ' zero_tray_all_list' ) :
self. _write_or_create( all_list. get ( ' zero_tray_yesterday_list' ) , ' 零点托盘 ' )
if all_list. get ( ' pneumatic_fixture_all_list' ) :
self. _write_or_create( all_list. get ( ' pneumatic_fixture_yesterday_list' ) , ' 气动夹具 ' )
if all_list. get ( ' jaw_vice_all_list' ) :
self. _write_or_create( all_list. get ( ' jaw_vice_yesterday_list' ) , ' 虎钳夹具 ' )
if all_list. get ( ' magnet_fixture_all_list' ) :
self. _write_or_create( all_list. get ( ' magnet_fixture_yesterday_list' ) , ' 磁吸夹具 ' )
if all_list. get ( ' adapter_board_all_list' ) :
self. _write_or_create( all_list. get ( ' adapter_board_yesterday_list' ) , ' 转接板(锁板)夹具' )
if all_list. get ( ' scroll_chuck_all_list' ) :
self. _write_or_create( all_list. get ( ' scroll_chuck_yesterday_list' ) , ' 三爪卡盘 ' )
else :
raise ValidationError( " 夹具型号基本参数认证未通过" )
# # 定时同步夹具型号基本信息
# def sync_fixture_materials_basic_parameters_yesterday(self) :
# config = self.env[' res.config.settings']. get_values( )
# headers = Common. get_headers(self, config['token'], config[' sf_secret_key'] )
# strUrl = config['sf_url'] + self. url
# r = requests.post(strUrl, json={}, data=None, headers= headers)
# r = r.json( )
# result = json.loads(r['result'] )
# if result['status'] == 1 :
# if result.get(' fixture_parameters_yesterday_list') :
# all_list = result.get(' fixture_parameters_yesterday_list' )
# if all_list.get(' zero_chuck_all_list') :
# self. _write_or_create( all_list.get(' zero_chuck_yesterday_list'), '零点卡盘' )
# if all_list.get(' zero_tray_all_list') :
# self. _write_or_create( all_list.get(' zero_tray_yesterday_list'), '零点托盘' )
# if all_list.get(' pneumatic_fixture_all_list') :
# self. _write_or_create( all_list.get(' pneumatic_fixture_yesterday_list'), '气动夹具' )
# if all_list.get(' jaw_vice_all_list') :
# self. _write_or_create( all_list.get(' jaw_vice_yesterday_list'), '虎钳夹具' )
# if all_list.get(' magnet_fixture_all_list') :
# self. _write_or_create( all_list.get(' magnet_fixture_yesterday_list'), '磁吸夹具' )
# if all_list.get(' adapter_board_all_list') :
# self. _write_or_create( all_list.get(' adapter_board_yesterday_list'), ' 转接板(锁板)夹具' )
# if all_list.get(' scroll_chuck_all_list') :
# self. _write_or_create( all_list.get(' scroll_chuck_yesterday_list'), '三爪卡盘' )
# else:
# raise ValidationError(" 夹具型号基本参数认证未通过" )
# 定时同步所有夹具型号基本信息
def sync_all_fixture_materials_basic_parameters( self ) :
config = self . env [ ' res.config.settings' ] . get_values( )
headers = Common. get_headers( self , config [ ' token ' ] , config [ ' sf_secret_key' ] )
strUrl = config [ ' sf_url ' ] + self . url
r = requests . post ( strUrl , json = { } , data = None , headers= headers )
r = r . json ( )
result = json . loads ( r [ ' result ' ] )
if result[ ' status ' ] == 1 :
if result. get ( ' fixture_parameters_all_list' ) :
all_list = result . get ( ' fixture_parameters_all_list' )
if all_list. get ( ' zero_chuck_all_list' ) :
self. _write_or_create( all_list. get ( ' zero_chuck_all_list' ) , ' 零点卡盘 ' )
if all_list. get ( ' zero_tray_all_list' ) :
self. _write_or_create( all_list. get ( ' zero_tray_all_list ' ) , ' 零点托盘 ' )
if all_list. get ( ' pneumatic_fixture_all_list' ) :
self. _write_or_create( all_list. get ( ' pneumatic_fixture_all_list' ) , ' 气动夹具 ' )
if all_list. get ( ' jaw_vice_all_list' ) :
self. _write_or_create( all_list. get ( ' jaw_vice_all_list ' ) , ' 虎钳夹具 ' )
if all_list. get ( ' magnet_fixture_all_list' ) :
self. _write_or_create( all_list. get ( ' magnet_fixture_all_list' ) , ' 磁吸夹具 ' )
if all_list. get ( ' adapter_board_all_list' ) :
self. _write_or_create( all_list. get ( ' adapter_board_all_list' ) , ' 转接板(锁板)夹具' )
if all_list. get ( ' scroll_chuck_all_list' ) :
self. _write_or_create( all_list. get ( ' scroll_chuck_all_list' ) , ' 三爪卡盘 ' )
else :
raise ValidationError( " 夹具型号基本参数认证未通过" )
# # 定时同步所有夹具型号基本信息
# def sync_all_fixture_materials_basic_parameters(self) :
# config = self.env[' res.config.settings']. get_values( )
# headers = Common. get_headers(self, config['token'], config[' sf_secret_key'] )
# strUrl = config['sf_url'] + self. url
# r = requests.post(strUrl, json={}, data=None, headers= headers)
# r = r.json( )
# result = json.loads(r['result'] )
# if result['status'] == 1 :
# if result.get(' fixture_parameters_all_list') :
# all_list = result.get(' fixture_parameters_all_list' )
# if all_list.get(' zero_chuck_all_list') :
# self. _write_or_create( all_list.get(' zero_chuck_all_list'), '零点卡盘' )
# if all_list.get(' zero_tray_all_list') :
# self. _write_or_create( all_list.get('zero_tray_all_list'), '零点托盘' )
# if all_list.get(' pneumatic_fixture_all_list') :
# self. _write_or_create( all_list.get(' pneumatic_fixture_all_list'), '气动夹具' )
# if all_list.get(' jaw_vice_all_list') :
# self. _write_or_create( all_list.get('jaw_vice_all_list'), '虎钳夹具' )
# if all_list.get(' magnet_fixture_all_list') :
# self. _write_or_create( all_list.get(' magnet_fixture_all_list'), '磁吸夹具' )
# if all_list.get(' adapter_board_all_list') :
# self. _write_or_create( all_list.get(' adapter_board_all_list'), ' 转接板(锁板)夹具' )
# if all_list.get(' scroll_chuck_all_list') :
# self. _write_or_create( all_list.get(' scroll_chuck_all_list'), '三爪卡盘' )
# else:
# raise ValidationError(" 夹具型号基本参数认证未通过" )
def _write_or_create( self , fixture_parameters_list, material_name) :
for item in fixture_parameters_list :
if item :
basic_parameters = self . search ( [ ( ' code ' , ' = ' , item . get ( ' code ' ) ) , ( ' active ' , ' in ' , [ True , False ] ) ] )
if not basic_parameters :
self. create( self . _get_basic_parameters_list( item , material_name) )
else :
basic_parameters. write ( self . _get_basic_parameters_list( item , material_name) )
# def _write_or_create(self, fixture_parameters_list, material_name) :
# for item in fixture_parameters_list:
# if item:
# basic_parameters = self.search([('code', '=', item.get('code')), ('active', 'in', [True, False])] )
# if not basic_parameters:
# self. create(self. _get_basic_parameters_list(item, material_name) )
# else:
# basic_parameters.write(self. _get_basic_parameters_list(item, material_name) )
class SyncFunctionalFixtureType ( models . Model ) :
@@ -3230,4 +3230,109 @@ class EmbryoRedundancySync(models.Model):
" height " : item [ ' height ' ] ,
" active " : item [ ' active ' ] ,
" remark " : item [ ' remark ' ] ,
} )
} )
class SyncfixtureMaterialsBasicParameters ( models . Model ) :
_inherit = ' sf.fixture.materials.basic.parameters '
_description = ' Redis 优先同步夹具基本参数 '
def sync_all_fixture_materials_basic_parameters ( self ) :
rc = RedisClient ( )
key = ' mrs:fixture_param_all_list '
all_list = rc . get_json ( key )
# ✅ Redis 无数据时,请求 MRS 端刷新 Redis 缓存
if not all_list :
config = self . env [ ' res.config.settings ' ] . get_values ( )
headers = Common . get_headers ( config [ ' token ' ] , config [ ' sf_secret_key ' ] )
refresh_url = config [ ' mrs_url ' ] + ' /api/refresh_redis/fixture_param '
try :
res = requests . post ( refresh_url , headers = headers , json = { } , timeout = 10 )
res . raise_for_status ( )
except Exception as e :
raise ValidationError ( f " Redis 无数据, MRS 缓存刷新失败: { str ( e ) } " )
# 再次尝试从 Redis 获取
all_list = rc . get_json ( key )
if not all_list :
raise ValidationError ( " Redis 刷新后仍无数据,无法同步夹具基本参数 " )
# ✅ 同步函数作为局部函数定义在方法体内部
def _sync_list ( param_list , material_name ) :
for item in param_list or [ ] :
if not item or not item . get ( ' code ' ) :
continue
record = self . search ( [ ( ' code ' , ' = ' , item [ ' code ' ] ) ] , limit = 1 )
vals = self . _get_basic_parameters_list ( item , material_name )
if record :
record . write ( vals )
else :
self . create ( vals )
# ✅ 各类夹具参数同步调用
_sync_list ( all_list . get ( ' zero_chuck_all_list ' ) , ' 零点卡盘 ' )
_sync_list ( all_list . get ( ' zero_tray_all_list ' ) , ' 零点托盘 ' )
_sync_list ( all_list . get ( ' pneumatic_fixture_all_list ' ) , ' 气动夹具 ' )
_sync_list ( all_list . get ( ' jaw_vice_all_list ' ) , ' 虎钳夹具 ' )
_sync_list ( all_list . get ( ' magnet_fixture_all_list ' ) , ' 磁吸夹具 ' )
_sync_list ( all_list . get ( ' adapter_board_all_list ' ) , ' 转接板(锁板)夹具 ' )
_sync_list ( all_list . get ( ' scroll_chuck_all_list ' ) , ' 三爪卡盘 ' )
_sync_list ( all_list . get ( ' air_tray_all_list ' ) , ' 气吹托盘 ' )
_sync_list ( all_list . get ( ' magnet_tray_all_list ' ) , ' 磁吸托盘 ' )
class SyncFixtureModel ( models . Model ) :
_inherit = ' sf.fixture.model '
_description = ' Redis 优先同步夹具型号 '
def sync_all_fixture_model ( self ) :
rc = RedisClient ( )
key = ' mrs:fixture_model_all_list '
all_list = rc . get_json ( key )
# ✅ Redis 没数据时,请求 MRS 接口刷新
if not all_list :
config = self . env [ ' res.config.settings ' ] . get_values ( )
headers = Common . get_headers ( config [ ' token ' ] , config [ ' sf_secret_key ' ] )
refresh_url = config [ ' mrs_url ' ] + ' /api/refresh_redis/fixture_model '
try :
res = requests . post ( refresh_url , headers = headers , json = { } , timeout = 10 )
res . raise_for_status ( )
except Exception as e :
raise ValidationError ( f " Redis 无数据, MRS 刷新失败: { str ( e ) } " )
# 再次尝试获取 Redis
all_list = rc . get_json ( key )
if not all_list :
raise ValidationError ( " 刷新后仍无 Redis 数据,无法同步夹具型号 " )
# ✅ 开始同步夹具型号
for item in all_list :
if not item or not item . get ( ' code ' ) :
continue
record = self . search ( [ ( ' code ' , ' = ' , item [ ' code ' ] ) ] , limit = 1 )
vals = {
' name ' : item [ ' name ' ] ,
' code ' : item [ ' code ' ] ,
' fixture_material_id ' : self . env [ ' sf.fixture.material ' ]
. search ( [ ( ' code ' , ' = ' , item [ ' fixture_material_code ' ] ) ] , limit = 1 ) . id ,
' multi_mounting_type_id ' : self . env [ ' sf.multi_mounting.type ' ]
. search ( [ ( ' code ' , ' = ' , item [ ' multi_mounting_type_code ' ] ) ] , limit = 1 ) . id ,
' brand_id ' : self . env [ ' sf.machine.brand ' ]
. search ( [ ( ' code ' , ' = ' , item [ ' brand_code ' ] ) ] , limit = 1 ) . id ,
' model_file ' : base64 . b64decode ( item [ ' model_file ' ] ) if item . get ( ' model_file ' ) else False ,
' status ' : item [ ' status ' ] ,
' active ' : item [ ' active ' ] ,
}
if record :
record . write ( vals )
else :
self . create ( vals )